【问题标题】:How to create an extern alias to mscorlib如何为 mscorlib 创建外部别名
【发布时间】:2014-12-21 12:53:22
【问题描述】:

我有一个第三方库,它提供 System.Collections.Generic.IReadOnlyCollection 类型,以便与 .NET 4.0 应用程序兼容。但是,如果您在 .NET 4.5 应用程序中链接此库,则会出现错误

  • “d:\3rdParty\net40\3rdPartyLib.dll”和“c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework”中都存在“System.Collections.Generic.IReadOnlyCollection”类型。 NETFramework\v4.5\mscorlib.dll'

解决此类冲突的一种方法是为您要使用的库指定一个外部别名,并使用该别名来消除我们所指代的程序集的歧义。指定外部别名包括单击项目的 References 文件夹中的库引用,按 F4 以显示属性网格,然后在“别名”字段中指定另一个名称。但是,问题是 mscorlib 没有出现在 Visual Studio 的参考列表中。尝试手动添加会导致错误

  • 无法添加对“mscorlib”的引用。该组件已被构建系统自动引用。

因此,鉴于以上所有情况,问题是:我如何指定 mscorlib 的外部别名,因为我看不到,甚至没有将它添加到项目的参考列表中?

【问题讨论】:

    标签: c# .net visual-studio .net-assembly


    【解决方案1】:

    答案与How to create an extern alias for System.Core?在同一行

    我们必须手动编辑项目的 .csproj 文件,然后查找列出项目所有引用的 ItemGroup 部分。在本节中,我们必须手动添加对 mscorlib 的引用并指定我们想要使用的别名,如

    <ItemGroup>
        <Reference Include="mscorlib">
          <Aliases>global, mscorlib</Aliases>
        </Reference>
    
         ... other references
    
    </ItemGroup>
    

    之后,我们可以到发生错误的源文件中,添加

    extern alias mscorlib;
    

    到文件的顶部。最后,每当我们遇到错误“... 'System.Collections.Generic.IReadOnlyCollection' 类型在两者中都存在...”时,我们可以指定 mscorlib 引用的完整命名空间,如

    mscorlib::System.Collections.Generic.IReadOnlyCollection<double> bla;
    

    当然,这样长的行也可以通过在文件顶部指定 using 指令来缩短,例如

    using ms = System.Collections.Generic;
    

    然后把它当作

    ms.IReadOnlyCollection<double> bla;
    

    【讨论】:

    • 奇怪,为什么不给这个不稳定的库取别名呢?
    • 只有一个地方需要 mscorlib 版本。为了引用 mscorlib 版本,我们需要从全局命名空间中删除第 3 方库。这意味着手动为每个使用 lib 的源文件添加一个外部别名,这是相当多的。就像我做的那样,我们只需要添加一个新别名(到 mscorlib),而不是从全局中删除另一个 lib。它似乎让事情变得更简单,但如果你有更好的选择,请告诉我!
    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2021-03-03
    • 2011-02-28
    • 2020-02-04
    相关资源
    最近更新 更多