【问题标题】:Make single executable from .NET application从 .NET 应用程序制作单个可执行文件
【发布时间】:2016-01-09 21:49:52
【问题描述】:

我有一个关于 .NET 应用程序和应用程序发布时生成的可执行文件的问题。现在我已经制作了我的应用程序,它按预期工作,我知道在 Release 文件夹中你必须最终应用程序。它有效,您可以运行它,但我的问题在于分发。

它生成了很多额外的文件,可能是因为它需要运行。但是有没有可能我可以将所有内容包装在一个包中,以便我可以分发一个~2-3mb 的文件,而不是一个单独包含每个文件的 zip 文件。

我不想为我的应用程序使用设置,因为它非常小,而独立的应用程序对我来说更好。提前致谢!

编辑:大部分是 DLL 和 XML 文件,请看这张图片:http://imgur.com/BxeZhaz

【问题讨论】:

  • Embed .net dll in c# .exe的可能重复
  • 你说的是什么文件?组件?图片?每种类型都有解决方案,请解释一下。
  • 查看我的编辑。大部分是 DLL 文件和 XML 文件。

标签: c# visual-studio exe


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我强烈推荐使用 Costura.Fody - 迄今为止将资源嵌入程序集的最佳和最简单的方法。它以 NuGet 包的形式提供。

    Install-Package Costura.Fody
    

    【讨论】:

      【解决方案3】:

      这是我个人用于其他应用程序文件(即数据库脚本、图像、字典或任何任意数据文件)的东西。不过,我没有在程序集上尝试这种方法。

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

      • 将资源文件(即Files.resx)添加到您的项目中
      • 在 Visual Studio 资源编辑器中使用选项“添加现有文件”
      • 标记资源(即myResourceLabel);确保 Visual Studio 将其视为“文件”资源而不是“图像”(使用扩展名“.dat”作为文件扩展名就足够了)
      • 从代码的角度来看,这种“FILE”资源被视为字节数组,因此您可以轻松地将资源数据提取到文件中,即:

      .

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-01
        相关资源
        最近更新 更多