如何在没有ILMerge的情况下将程序集嵌入到控制台应用程序中?

时间:2010-03-10 16:21:03

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

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

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

  • 我收到一个内部为FileNotFoundException的TypeInitializationException。它试图在文件系统上找到程序集并失败。
  • 它永远不会进入Main方法,其中分配了AssemblyResolve的事件处理程序

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

使用控制台应用程序可能无法做到这一点?似乎不太可能,但我没有看到解决方法。

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

3 个答案:

答案 0 :(得分:2)

考虑使用ILMerge将组件合并为一个而不是嵌入为资源。这是ILMerge的下载网站。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果是混合模式程序集,则必须驻留在磁盘上。一些限制或其他。