从.net应用程序中生成单个可执行文件

本文关键字:单个 可执行文件 net 应用程序 | 更新日期: 2023-09-27 18:17:20

我有一个关于。net应用程序和随应用程序发布的可执行文件的问题。现在我做了我的应用程序,它按预期工作,我知道在发布文件夹中你必须最终应用程序。它可以工作,你可以运行它,但我的问题是在分发。

它生成了很多额外的文件,这可能是因为它需要这些文件才能运行。但是有没有可能我可以把所有的东西都包装在一个包里,这样我就可以分发一个大约2-3mb的文件,而不是一个包含每个文件的zip文件。

我不想为我的应用程序使用安装程序,因为它非常小,一个独立的应用程序对我来说更好。提前感谢!

编辑:这是大多数DLL和XML文件,见此图像:https://i.stack.imgur.com/UnqeT.jpg

从.net应用程序中生成单个可执行文件

您可以使用ILmerge。这是一个nuget包从这里https://www.nuget.org/packages/ilmerge。它可以将所有库和*.exe组合成一个程序集。它是可靠的,您可以将其添加为构建事件的一部分。特别是在发布模式下作为构建后事件。

我强烈推荐使用Costura。Fody -迄今为止在程序集中嵌入资源的最好和最简单的方法。它可以作为NuGet包获得。

Install-Package Costura.Fody

这是我个人使用的附加应用程序文件(即数据库脚本,图像,字典或任何任意数据文件)。

如果您不想使用setup,一个选项是将外部文件嵌入为可执行应用程序资源,并在第一次运行时将它们解压缩到应用程序或临时目录。

  • 添加资源文件(即Files.resx)到您的项目
  • 在Visual Studio资源编辑器中使用选项"添加现有文件"
  • 标记资源(即myResourceLabel);确保Visual Studio将其视为"FILE"资源,而不是i.e.。"IMAGE"(使用扩展名"。dat"作为文件扩展名就足够了)
  • 从代码的角度来看,这样的"FILE"资源被视为字节数组,所以你可以很容易地将资源数据提取到文件中,即:

.

if (!System.IO.File.Exists("myfile.dat"))
  System.IO.File.WriteAllBytes("myfile.dat", Files.myResourceLabel);