我的目标是创建一个可启动阴影复制应用程序的可执行文件。诀窍是,我希望这个初学者程序没有外部依赖关系,也不必包含任何有关它必须启动的程序的知识。C#.dll程序集是否可以包含入口点?
我也希望它是目录中唯一的可执行文件。换句话说,我希望它“运行”.dll程序集而不是.exe程序集。 (我可以要求每次加载到一个新的AppDomain的.dll文件的名称是相同的,像Main.dll或类似的东西)。
它看起来像AppDomain.ExecuteAssembly会做我想要的。它表示它将在“.NET Framework标题中指定的入口点”开始执行。“
当我尝试使用该函数时,出现错误“在汇编'DllApp'中找不到入口点”。
起动程序我有,只是想经营组装:
static void Main()
{
AppDomain domain = AppDomain.CreateDomain("DllApp");
domain.ExecuteAssembly("DllApp.dll");
}
应用程序代码,在一个.dll文件,使用默认的入口点:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
This page on Main() functions说, “图书馆和服务不需要Main方法作为切入点”。它没有说他们不能有一个默认入口点。
我已经试过公共/私有静态无效的主要,一个int返回类型的所有各种排列,字串[] args作为参数,有一个命名空间,没有命名空间,静态/非静态类等
我能够将我的代码更改为从MarshalByRefObject继承,然后使用CreateInstance创建一个对象,但是似乎它会将启动器更紧密地耦合到它应该启动的程序。如果我可以使用ExecuteAssembly,那么正在启动的应用程序只需要一个静态无效Main,而且这非常简单,很难搞定。
是否有可能使.dll程序集有一个默认入口点,并为ExecuteAssembly找到它,或者我只是不得不辞去自己走另一条路线?
将.NET程序集(dll)的入口点本身不作为进程启动是没有意义的。 – Zenwalker 2012-03-06 03:48:49