2

我有一个由多个项目(所有类库)组成的解决方案。假设: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,但我不想这样做。

4

1 回答 1

2

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

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

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

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

项目 D 和 E 将与 ABC 组合程序集一起出现在一个解决方案中。

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

于 2012-05-03T17:08:14.773 回答