嘿,我从.NET Framework 4.8切换到了.NET 6.0 当我构建文件时,它会输出build.exe(130kb)和build.dll(2.3mb)。因此,看起来exe在运行时使用了dll,因为dll内含有源代码,而.exe则没有。 是否可能仅生成exe而不需要dll? 我尝试使用Costura Fody资源嵌入器,但没有成功。 编辑: 我能够使用“发布”功能创建自包含的exe,但文件大小从3mb增加到了180mb的exe...还有其他方法吗?
您可能需要一个单文件框架依赖的部署而不是"自包含"。这样,您就不必在部署包中包含所有框架文件,而是计算机必须已经安装了框架。要做到这一点,请将部署设置中的 部署模式 从自包含 更改为框架依赖。请参见单文件部署。您也可以查看 "修剪" 来删除不需要的依赖项,因为这应该会显著减小自包含应用程序的大小。
你的观察很正确。.NET Core应用程序的.exe文件只是一个存根加载程序。实际代码在.dll文件中。对于应用程序项目,现在您有一个application.dll和一个application.exe。除非您使用您提到的任何选项(部署为单个文件),否则我认为没有其他方法可行。
System.Reflection.Assembly.GetEntryAssembly()?.Location
的返回值的扩展名从.dll
改为.exe
是否总是有效的? - BitLauncherAssembly.GetExecutionAssembly().Location + "MyApplication.exe"
,但这只是小问题。 - PMFvar entryAssemblyPath = System.Reflection.Assembly.GetEntryAssembly()?.Location; var exePath = Path.ChangeExtension(entryAssemblyPath, "exe");
,尽管我不能依赖它,因为微软可能会在未来更改它,或者我不知道文档是否保证这种约定始终正确。 - BitLauncher