C#.dll程序集可以包含入口点吗?

Sea*_*ean 17 c# assemblies appdomain .net-assembly entry-point

我的目标是创建一个可启动影子复制应用程序的可执行文件.诀窍是,我希望这个入门程序没有外部依赖关系,并且不必包含任何有关它必须启动的程序的知识.

我也希望它是目录中唯一的可执行文件.换句话说,我希望它"运行".dll程序集而不是.exe程序集.(我可以要求每次加载到新AppDomain中的.dll文件的名称都是相同的,比如Main.dll或类似的东西.)

它看起来像AppDomain.ExecuteAssembly将完全按照我的意愿行事.它表示它将在".NET Framework标头中指定的入口点"开始执行.

当我尝试使用该功能时,我收到错误"在程序集中找不到入口点'DllApp'".

我有启动程序,只是试图运行程序集:

static void Main()
{
    AppDomain domain = AppDomain.CreateDomain( "DllApp" );
    domain.ExecuteAssembly( "DllApp.dll" );
}
Run Code Online (Sandbox Code Playgroud)

应用程序代码,在.dll文件中,带有默认入口点:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault( false );
        Application.Run( new Form1() );
    }
}
Run Code Online (Sandbox Code Playgroud)

Main()函数的这个页面说"库和服务不需要Main方法作为入口点".它并没有说它们也没有默认入口点.

我已经尝试了public/private static void main的所有各种排列,int返回类型,string [] args作为参数,带有命名空间,没有命名空间,静态/非静态类等.

我能够将我的代码更改为继承MarshalByRefObject,然后使用CreateInstance创建一个对象,但这似乎会将启动器更紧密地耦合到它应该启动的程序.如果我可以使用ExecuteAssembly,那么正在启动的应用程序只需要一个静态的void Main,这非常简单而且很难搞乱.

.dll程序集是否有可能具有默认入口点,并且ExecuteAssembly可以找到它,或者我是否只需要让自己去另一条路径?

Kei*_*las 21

您可以将.NET应用程序编译为exe(它是一个程序集)并将其重命名为.DLL,它将充当普通的.NET .dll程序集.然后它会有你的入口点.