【问题标题】:how can I embed an assembly into a console application without ILMerge?如何在没有 ILMerge 的情况下将程序集嵌入到控制台应用程序中?
【发布时间】:2011-01-25 23:42:37
【问题描述】:

这里有很多关于这个的帖子,我正在使用this code from another SO post 并在我的 Main() 方法中放置一个委托分配。其他帖子都没有直接回答我的问题。

我已将我的第三方程序集作为资源嵌入,但是当我启动应用程序时:

  • 我得到一个带有 FileNotFoundException 内部的 TypeInitializationException。它试图在文件系统上找到程序集并失败。
  • 它永远不会到达分配 AssemblyResolve 事件处理程序的 Main 方法

我的 Resources.resx 中嵌入了两个程序集引用,一个是第三方工具(命令行解析器),另一个是应用程序所在的库文件。

也许这对于控制台应用程序是不可能的?似乎不太可能,但我看不到解决办法。

回复:ILMerge 等:我想完全在代码中完成这项工作,而不涉及任何工具。原因:我不希望存储库中的源代码需要其他团队成员安装他们可能还没有的工具。如果这不可能,那么 ILMerge 看起来是下一个最佳选择。

【问题讨论】:

  • ILMerge 与 C# 和 Visual Studio 本身相比,作为第一方工具有何不同?
  • @Chris:好点子。现在编辑。不过,如果我可以在不涉及 ILMerge 的情况下完成这项工作,我更愿意这样做。这似乎是合理的。

标签: c# assemblies console-application assembly-resolution


【解决方案1】:

考虑使用 ILMerge 将程序集合并为一个,而不是作为资源嵌入。这是ILMerge的下载站点。

您可以将第三方程序集合并到您的控制台应用程序中。

【讨论】:

  • 糟糕,打败我。我刚刚添加了“我不想使用第 3 方……”
  • 猜我应该已经阅读了另一个 SO 问题的链接 :)
  • 是的,看起来应该只需要几行代码就可以实现,我只是不知道如何让事件在应用程序生命周期的正确时间触发。跨度>
【解决方案2】:

您还可以查看应用程序虚拟化工具,例如 XenoCode。他们可以将多个程序集(包括 .net 框架本身)打包成一个独立的可执行文件。

【讨论】:

    【解决方案3】:

    如果是混合模式程序集,它必须驻留在磁盘上。一些限制什么的。

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      相关资源
      最近更新 更多