即使类名完全合格也遇到类型冲突?

时间:2019-01-22 19:41:13

标签: c# .net

我定义了以下变量:

var x = Microsoft.WindowsAzure.Storage.Blob.StandardBlobTier.Hot;

但是编译器返回以下错误:

  

错误CS0433类型'StandardBlobTier'同时存在   'Microsoft.Azure.Storage.Blob,版本= 9.4.2.0,文化=中性,   PublicKeyToken = 31bf3856ad364e35”和“ Microsoft.WindowsAzure.Storage”,   版本= 9.1.1.0,文化=中性,PublicKeyToken = 31bf3856ad364e35'

我认为我没有见过在指定完全合格的类名之后发生过这样的类型冲突错误。知道此错误的根本原因是什么或如何解决?

更新

这里有一些更有趣的信息。下面的y var被设置为所述冲突类型的完全限定引用,但是编译器告诉我该冲突类型不存在!:

var x = Microsoft.WindowsAzure.Storage.Blob.StandardBlobTier.Hot;
var y = Microsoft.Azure.Storage.Blob.StandardBlobTier.Hot;

这似乎令人困惑

3 个答案:

答案 0 :(得分:0)

您的应用程序有2个该类型的版本。您可以在项目中更改参考以使用“特定版本”。参见:How exactly does the "Specific Version" property of an assembly reference work in Visual Studio?

答案 1 :(得分:0)

Microsoft.Azure.Storage.DataMovement(DMlib),基于WindowsAzure.Storage 因此,在安装DMlib时,必须安装WindowsAzure.Storage

Microsoft.Azure.Storage.Blob是新XSCL的一部分,该XSCL溢出到不同的lib中以支持B / F / Q ...

旧的WindowsAzure.Storage和新的Microsoft.Azure.Storage.Blob具有相同的名称空间和相同的对象类型名称。

因此,当将它们一起使用时,您将获得该异常。

答案 2 :(得分:0)

我不是这个问题的专家,但是正如我在评论中指出的那样,我立即怀疑您的构建系统正在引用一个不断发展的库的多个不兼容版本,并且应该在此进行修复。停止引用两个版本的库。

要回答一个更普遍的问题:不幸的是,当您有两个库并且它们都具有完全相同的类名时,可以通过创建一个 extern别名来解决该问题:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/extern-alias