Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net ILmerge和程序集引用_.net_Assemblies_Ilmerge - Fatal编程技术网

.net ILmerge和程序集引用

.net ILmerge和程序集引用,.net,assemblies,ilmerge,.net,Assemblies,Ilmerge,我有一个由几个项目(所有类库)组成的解决方案。 让我们说:A,B,C,D,E A、 B和C提供核心功能,必须一起分发。 D和E提供了一些适配器,这些适配器在任何情况下都不一定需要 所以,很自然,我想在分发之前将ILA、B和C合并到一个程序集(名为ABC)中 问题是,在编译项目时,D和E引用的是A、B和/或C,而不是ABC。因此,当我稍后尝试在其他项目中引用ABC、D和E时,我会遇到编译错误,比如:“实例参数:无法从‘A.IBoo’转换为‘A.IBoo’”。当然,在VS中,我还可以看到程序集签名(

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

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

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

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

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

我知道我可能会使用发布者策略,但它并不漂亮


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

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

您可以删除项目并仅引用组合的程序集,将其视为更像一个库,或者可以在生成后操作中组合项目

另一种可能是别名全局名称空间(http://msdn.microsoft.com/en-us/library/c3ay4x3d(v=vs.80).aspx)并参考组合组件。缺点是,您将始终是适配器中的一个构建落后者

在没有看到实际项目的情况下,我会这样做:我将ABC项目分开,并将它们放在自己的解决方案中。对于生成后事件,我将运行ILMerge。确保此文件已版本化并具有强名称。这会让你在路上不再头疼

项目D和E将与ABC组合组件的参考一起位于解决方案中


同样,如果看不到代码和依赖项,就很难判断。它还取决于变化发生的频率。如果我在ABC中进行更改以适应DE,那么有两种解决方案会很快变老

感谢您提供了几个选项。我有内部和外部的参考资料,就像你的情况一样。实际上,我正在谈论的项目是:,build.cmd可以“解释”到目前为止我在做什么。划分一个解决方案可能是最好的主意,但由于它是一个年轻的项目,我必须经常处理它的每一部分。