【问题标题】:.NET Assembly Dependencies.NET 程序集依赖项
【发布时间】:2010-02-15 10:44:01
【问题描述】:

也许我在这里遗漏了一些明显的东西,但是......

我已经构建了一个可重用的通用 C# 类库项目(A.dll),它引用了 3 个其他程序集(B.dll、C.dll 和 D.dll)

但是,如果我想在另一个项目中重用我的组件 A.dll,我仍然必须包含对 B.dll、C.dll 和 D.dll 的引用。

有什么方法可以配置 A.dll 以将其所有依赖项构建到 A.dll 中,这样我就不必包含其他 3 个程序集?

干杯

【问题讨论】:

  • 运送 4 个程序集或 1 个程序集几乎没有区别。使用单独的程序集,您可以保持所有版本控制/签名完好无损。

标签: c# .net assemblies reference


【解决方案1】:

可以合并程序集,使用工具ILMerge

C:\Program Files\Microsoft\ILMerge\ILMerge.exe /target:library /out:abcd.dll a.dll b.dll c.dll d.dll"

这会将 dll abcd 合并到 abcd.dll。它还将合并调试符号,但不会合并 XML 文档。

您还必须在新项目中引用 dll 本身,而不是在各自的项目中。例外情况是,如果您将库合并到可执行文件中,在这种情况下,您可以引用相应的库/项目,因为它们将与可执行文件一起加载。

Mono 项目也为此提供了一个工具,称为 mkbundle。

还有ILRepack,它旨在与ILMerge 兼容,但它是FLOSS。

【讨论】:

  • 是的,你可以这样做。但你不应该(一般来说)。
  • 你弄乱了版本和签名信息。为了获得可观的收益。
  • @Henk Holterman:啊……我明白了。但据我所知,主程序集的版本和签名被保留。但是,您当然是对的,您应该始终注意这一点。感谢您提供信息。
  • 感谢您对此的意见。干杯母球
【解决方案2】:

这类似于 DLL 的静态链接,它适用于原生 C++。据我所知,您不能在 .NET 代码中静态链接程序集,因此您必须包含所有 DLL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多