是否可以在库程序集中设置程序入口点



在编译的系统语言(如C/C++(中,通常在链接时解析入口点,这使得能够在DLL中具有main函数,因此链接器不会抱怨并将入口点地址设置为DLL中的符号(或导入库中的函数,对此不确定(。

我最近开始使用C#,我想做一些类似的事情,在库中有Main方法(最好是根据.NET标准构建(,而实际的exe不定义任何入口点,而是使用库中的入口点。

我知道我可以在exe中编写一个Main方法,并在其中调用库的Main,但重点是我希望避免这种情况。

我相信Winforms和WPF提供了类似的东西,所以希望我尝试做的事情是可能的,否则,请教育我为什么.NET没有提供这样的机制。

这里似乎有一个误解:

在.NET中,DLL和EXE之间的唯一区别纯粹是头中存在.entrypoint,它标识CLR引导程序调用的启动方法。

如果没有,那么它就是一个库,而不是一个应用程序。在任何方法上都有一个没有.entrypoint的EXE是没有意义的,它不会运行,因为CLR引导程序不知道该怎么处理它。

Winforms和WPF并没有做你声称的事情:它们有一个正常的.entrypoint,它只是你不需要担心的锅炉板代码。

为了清楚起见:文件的实际扩展名有些无关紧要。根据需要调用程序集是完全合法的,并且可以将包含.entrypoint的程序集链接到另一个程序集中,无论它是否具有.exe扩展名或任何其他扩展名。

但是,Windows只有在具有.exe扩展名的情况下才会自动引导文件,因为CLR引导程序本身需要引导。不过,您可以调用AppDomain.ExecuteAssembly,它本质上在另一个应用程序中执行相同的操作。

最新更新