【问题标题】:Combine .NET external dlls to a single executable file将 .NET 外部 dll 合并到一个可执行文件中
【发布时间】:2014-09-01 13:45:58
【问题描述】:

这是一个简单的问题。如果 Newtonsoft.Json.dll 不在程序文件夹中,我将无法运行我的程序。为什么这个?我尝试添加引用,将文件添加到项目根目录,添加到资源文件夹,但没有任何效果。如何在程序文件夹中没有 Newtonsoft.Json.dll 的情况下运行程序?我正在开发 Windows 窗体应用程序。

更新

问题解决了,感谢 spender 向我介绍了ILMerge,这是一个非常棒的 NuGet 包,可以将第三方 dll 组合成一个可执行的二进制文件。对于想要制作独立应用程序的人,只需使用 ILMerge。快速、简单且非常有用。再见!

【问题讨论】:

  • 它在 app 文件夹中有什么问题?您是否想要输出单个可执行文件而 nothing 其他?
  • 是的,一个独立的应用程序
  • 我个人最喜欢的嵌入项目依赖项的工具是 Fody Costura。它具有最少的设置并集成到构建中。它将依赖项(托管、非托管和混合模式的第三方程序集以及您自己的项目输出)压缩和打包为嵌入式资源,如果您玩得好,可以进行单文件部署。 github.com/Fody/Costura#readme

标签: c# json winforms visual-studio ilmerge


【解决方案1】:

通常,如果您的程序使用 DLL,则您需要在 app 文件夹(或用户路径或 GAC)中使用该 DLL。

分发多个文件的传统方法是使用安装程序。您可以使用WiXVS Installer Projects 扩展名编写一个。现在,您的所有输出文件都将与已安装程序附带的所有其他优点一起安装。我非常喜欢这种方法。

但是,还有其他选择:

  • Download the source 并将源代码复制到您的主项目中,然后它将被编译到您的主程序集中(确保您检查许可是否允许这样做)。

  • 使用ILMerge 将所有程序集组合成一个二进制文件。

【讨论】:

  • @Hypister :请考虑一个与 JSON.NET 关联较少的标题更改,以及更多关于使用外部 DLL 分发 .net 应用程序的内容。
【解决方案2】:

如果你不想在你的程序中引用 dll,你可以将它安装到客户端机器上的 GAC,但我不明白你想要哪个上下文

【讨论】:

  • 我只想独立运行该程序。用它编译的dll。
【解决方案3】:

如果您只需要一些 JSON 序列化。你能用.Net 安装的JavascriptSerializer 类来切换你的功能吗?

http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs.90).aspx

【讨论】:

  • 那会很有用,但我需要使用 JSON。
  • 这就是 JavascriptSerializer 所做的……创建和读取 JSON。我看到你有一个使用 ILMerge 的解决方案,这是一个很棒的工具,但你可能想尝试一下以避免额外的构建复杂性并坚持使用基类库。一旦你有一个可行的解决方案就很难做到:)
  • 谢谢,但我迟早会需要这个工具。当我使用 JavascriptSerializer 时,我没有正确的引用,所以我放弃并选择了 ILMerge。
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多