繁体   English   中英

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

[英]getting a type conflict even though class name is fully qualified?

我定义了以下变量:

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

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

错误CS0433类型'StandardBlobTier'同时存在于'Microsoft.Azure.Storage.Blob,Version = 9.4.2.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'和'Microsoft.WindowsAzure.Storage,Version = 9.1.1.0,Culture = neutral ,PublicKeyToken = 31bf3856ad364e35'

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

UPDATE

这是一些更有趣的信息。 下面的y var被设置为声明的冲突类型的标准引用,但是编译器告诉我该冲突类型不存在!:

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

这似乎令人困惑

您有2个该类型的版本可用于您的应用程序。 您可以在项目中更改参考以使用“特定版本”。 请参见: 程序集引用的“特定版本”属性在Visual Studio中如何工作?

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具有相同的名称空间和相同的对象类型名称。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM