是什么原因导致另一个程序集引用同一程序集的两个版本

时间:2016-09-20 20:49:11

标签: c# .net

我有一个C#程序集,其中包含一些Nuget依赖项,这些依赖项是作为TFS构建中的工件生成的。生成的程序集中两个不同版本的相同程序集包含在其引用的程序集列表中。我想知道这是怎么发生的,因为我不确定后果,并且一开始并没有想到它是可能的。到目前为止,我还没有能够在任何一个最小的例子中重现这个问题。

详细说明,我有根据.NET Reflection,Mono.Cecil,dotPeek和ILSpy的Company.Product.A.dll引用了Company.Product.B.dll 1.0.0.0和Company.Product.B.dll 1.0.2.0例如

// The list of referenced assemblies below contains two versions of Company.Product.B.dll
Assembly.LoadFile(@"C:\Company.Product.A.dll").GetReferencedAssemblies()
  • Company.Product.A.dll的基础.csproj只有一个对Company.Product.B.dll 1.0.2.0的引用,以及对同一版本的相应Nuget包引用。
  • Company.Product.A.dll程序集依赖于另一个也引用Company.Product.B.dll的程序集(我不确定这很重要,但我怀疑它可能有什么东西如果其他程序集引用旧版本的Company.Product.B.dll,则解决此问题。
  • 我不知道在构建过程中是否有任何ILMerge malarkey,但为了以防万一,我仍在调查。
  • 构建服务器每次都在生成干净的构建。
  • 根组件和依赖程序集的两个版本都没有强名称。
  • 虚假装配参考似乎没有负面影响;使用程序集的产品按预期工作

ILDasm清单如下所示(我不确定第二个引用的_8是什么意思):

.assembly extern /*23000008*/ Company.Product.B
{
      .ver 1:0:2:0
}
.assembly extern /*23000009*/ Company.Product.B as Company.Product.B_8
{
      .ver 1:0:0:0
}

有谁可以告诉我什么样的事件序列会导致一个程序集引用同一个依赖程序集的两个不同版本?

0 个答案:

没有答案