在编译后的系统语言(如C/C++)中,通常在链接时间解析入口点,这使链接器能够在DLL中拥有main函数,这样链接器就不会抱怨并将入口点地址设置为DLL中的符号(或者导入库中的函数,但不确定)。
我最近开始使用C#,我想做一些类似的事情,在库中有Main方法(最好是根据.NET标准构建),而实际的.NET不定义任何入口点,而是使用库中的入口点。
我知道我可以在exe中编写一个Main方法,并在其中调用库的Main,但重点是要避免这种情况。
我相信Winforms和WPF提供了类似的东西,所以希望我所做的是可能的,否则,请教我为什么.NET没有提供这样的机制。
发布于 2022-07-25 00:15:41
这里似乎有一种误解:
在.NET中,DLL和EXE之间唯一的区别是头中存在.entrypoint,它标识CLR引导程序调用的启动方法。
如果没有,那么它是一个库,而不是一个应用程序。拥有一个在任何方法上没有.entrypoint的EXE是没有意义的,它不会运行,因为CLR引导程序将不知道如何处理它。
Winforms和WPF不做你声称的事情:它们有一个正常的.entrypoint,只是碰巧是你不需要担心的锅炉板代码。
为了清楚起见:文件的实际扩展名在某种程度上无关紧要。任意调用程序集是完全合法的,您可以将包含.entrypoint的程序集链接到另一个程序集中,无论它是否有.exe扩展或其他任何扩展。
但是,只有当文件具有.exe扩展名时,Windows才会自动引导,因为CLR引导程序本身需要引导。但是,您可以调用AppDomain.ExecuteAssembly,它本质上是在另一个应用程序中执行相同的操作。
https://stackoverflow.com/questions/73092307
复制相似问题