【问题标题】:getting a type conflict even though class name is fully qualified?即使类名是完全限定的,也会出现类型冲突?
【发布时间】:2019-01-22 19:41:12
【问题描述】:

我定义了以下变量:

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;

这似乎令人困惑

【问题讨论】:

标签: c# .net


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Microsoft.Azure.Storage.DataMovement (DMlib),基于WindowsAzure.Storage 所以安装DMlib的时候一定要安装WindowsAzure.Storage

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

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

    所以当你一起使用它们时,你会得到那个异常。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-12-14
        • 2013-10-24
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-25
        相关资源
        最近更新 更多