ILmerge和汇编参考

时间:2012-05-03 16:52:26

标签: .net assemblies ilmerge

我有一个由几个项目(所有类库)组成的解决方案。 让我们说:A,B,C,D,E。

A,B和C提供核心功能,必须一起分发。 D和E提供了在某些情况下不一定需要的一些适配器。

所以,很自然地,我希望在分发之前将A,B和C ILm​​erge到一个程序集(名为ABC)。

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

有没有好办法解决这个问题?

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

另外,我知道我可以在原始解决方案中组合项目并避免使用ILmerge,但我不愿意。

1 个答案:

答案 0 :(得分:2)

我遇到了类似的问题。事实证明我有两次引用的类型。一旦进入组合装配,一次进入单独的项目。地狱真令人沮丧。

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

另一种可能性是为全局命名空间添加别名(http://msdn.microsoft.com/en-us/library/c3ay4x3d(v=vs.80).aspx)并引用组合程序集。缺点是你将永远是适配器背后的构建。

在没有看到实际项目的情况下,我会做的是:我将ABC项目分开并将它们放在自己的解决方案中。通过post build事件,我将运行ILMerge。确保这是版本和强名称。它将为您节省头痛。

项目D和E将与ABC组合装配的参考一起处于解决方案中。

再次没有看到代码和依赖关系,很难说。它还取决于变化发生的频率。如果我在ABC中进行更改以容纳具有两个解决方案的DE将会变得非常快。