C# .NET 6.0 - 仅限可执行文件?

5

嘿,我从.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...还有其他方法吗?

2个回答

4
您可能需要一个单文件框架依赖的部署而不是"自包含"。这样,您就不必在部署包中包含所有框架文件,而是计算机必须已经安装了框架。要做到这一点,请将部署设置中的 部署模式自包含 更改为框架依赖。请参见单文件部署
您也可以查看 "修剪" 来删除不需要的依赖项,因为这应该会显著减小自包含应用程序的大小。

2
你的观察很正确。
.NET Core应用程序的.exe文件只是一个存根加载程序。实际代码在.dll文件中。对于应用程序项目,现在您有一个application.dll和一个application.exe
除非您使用您提到的任何选项(部署为单个文件),否则我认为没有其他方法可行。

如果我想启动第二个自身实例,该怎么做?将 System.Reflection.Assembly.GetEntryAssembly()?.Location 的返回值的扩展名从 .dll 改为 .exe 是否总是有效的? - BitLauncher
@BitLauncher 是的,那应该可以。不过,我可能会使用 Assembly.GetExecutionAssembly().Location + "MyApplication.exe",但这只是小问题。 - PMF
谢谢,我使用了 var entryAssemblyPath = System.Reflection.Assembly.GetEntryAssembly()?.Location; var exePath = Path.ChangeExtension(entryAssemblyPath, "exe");,尽管我不能依赖它,因为微软可能会在未来更改它,或者我不知道文档是否保证这种约定始终正确。 - BitLauncher
@BitLauncher 我认为这样做是安全的,因为如果没有更新运行时并重新构建,它肯定不会出错。编写一个单元测试,这样您就可以注意到更改。 - PMF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接