【问题标题】:ILmerge and Assembly ReferencesILmerge 和汇编参考
【发布时间】:2012-05-03 16:52:26
【问题描述】:

我有一个由多个项目(所有类库)组成的解决方案。 假设:A、B、C、D、E。

A、B 和 C 提供核心功能并且必须一起分布。 D 和 E 提供了一些不一定在所有情况下都需要的适配器。

所以,很自然地,我想在分发之前将 A、B 和 C 合并为一个程序集(名为 ABC)。

问题是在编译项目时,D 和 E 引用了 A、B 和/或 C,而不是 ABC。因此,当后来我尝试在其他项目中引用 ABC、D 和 E 时,我得到编译错误,例如:“实例参数:无法从 'A.IBoo' 转换为 'A.IBoo'”。当然,在 VS 中,我还可以看到程序集签名(名称)是不同的。

有什么好办法解决这个问题吗?

我知道我可能会使用发布商政策,但它并不漂亮。

另外,我知道我可以将项目合并到原始解决方案中并避免使用 ILmerge,但我不想这样做。

【问题讨论】:

    标签: .net assemblies ilmerge


    【解决方案1】:

    我遇到了类似的问题。事实证明,我引用了两次类型。一次在组合组件中,一次在单独的项目中。这真是令人沮丧。

    您可以删除项目并仅引用组合程序集,将其视为库,或者可以在构建后操作中组合项目。

    另一种可能性是为全局命名空间 (http://msdn.microsoft.com/en-us/library/c3ay4x3d(v=vs.80).aspx) 设置别名并引用组合程序集。不利的一面是您将始终落后于适配器。

    在没有看到实际项目的情况下,我会这样做:我会分离 ABC 项目并将它们放入自己的解决方案中。通过构建后事件,我会运行 ILMerge。确保这是版本化和强命名的。它会让你在路上不那么头疼。

    项目 D 和 E 将与对 ABC 组合程序集的引用一起在一个解决方案中。

    再次没有看到代码和很难分辨的依赖关系。它还取决于更改发生的频率。如果我在 ABC 中进行更改以适应具有两种解决方案的 DE,那么会很快变老。

    【讨论】:

    • 感谢您提供几个选项。与您的情况一样,我有内部和外部参考。实际上,我正在谈论的项目是这样的:github.com/Kostassoid/Anodyne, build.cmd 可以“解释”我到目前为止所做的事情。划分解决方案可能是最好的主意,但由于它是一个年轻的项目,我必须经常处理它的每个部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多