【问题标题】:Compile a C# project into one dll将一个 C# 项目编译成一个 dll
【发布时间】:2011-10-19 23:51:01
【问题描述】:

我有一个为两个不同项目提供服务的基础项目。我希望能够让主项目在编译时将所有引用编译成一个 dll。

这需要内置在项目构建中,这样 Jr 开发人员就不必担心了。


解决方案:我最终在项目的构建后操作中添加了一行,以便一个好的构建执行以下操作:

$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll>

ilmerge.exe 已移至项目中,上面的行采用给定的 dll 并创建一个。

【问题讨论】:

  • 好的,那么你的问题是什么?您已标记 ilmerge,这是一个可用于执行此操作的工具。您对此有疑问吗?
  • 抱歉,我知道如何在 NuGenUnify 中使用该工具,但我希望它在我编译项目时发生。我可以添加到该过程中吗?
  • 您的问题并没有直接明确,也许您可​​以更新它。我编辑了我的答案。

标签: .net visual-studio-2010 ilmerge


【解决方案1】:

查看 Microsoft 的外部工具 ILMerge:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx 它可以将多个程序集合并为一个。

【讨论】:

    【解决方案2】:

    (编辑此答案以更新指向新下载位置的链接并反映新见解)

    您最好的选择是使用Micorosoft's ILMerge。它曾经可以从 Microsoft Research 单独下载(它不是 VS 或 .NET SDK 的一部分)。

    original version 一直维护到 2012 年。现在它是 NuGet package,这是目前获取它并将其添加到您的项目和构建服务器的最佳方式。

    作为替代方案,您可能想尝试来自 CodePlex 的 ILMerge GUI,它为 ILMerge 提供了 GUI 界面。它的发展被中断,但现在又活跃起来了。

    Codeproject article on ILMerge 详细解释了如何使用它并解释了一些用例。一个示例命令是:

    ilmerge /target:winexe /out:AllInOne.exe NormalProgram.exe Lib1.dll Lib2.dll
    

    作为替代方案,您可以将Fody 与Costura.Fody 一起使用,如SO response 中所述。


    注意(1):如果您需要合并并行程序集(即混合原生 64 位和 32 位程序集),您应该咨询this SO article on loading side-by-side assemblies dynamically。

    注意 (2):要将其作为构建过程的一个组成部分添加,只需转到项目属性 > 构建事件 > 单击“编辑构建后”并填写上面的命令。单击“宏”以查看如何引用当前文件或程序集。

    【讨论】:

      【解决方案3】:

      您可以使用ILMerge 来合并多个程序集:

      ILMerge 是一个用于将多个 .NET 程序集合并到一个 .NET 程序集的实用程序。它适用于可执行文件和 DLL,并带有几个用于控制输出处理和格式的选项。有关详细信息,请参阅随附的文档。

      您可以将基础程序集合并在一起,并将生成的程序集用作对其他项目的引用。

      或者,而不是两个项目,将您的共享代码放在一个项目中,以便获取单个程序集以供参考。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多