c# - 如何为 mscorlib 创建外部别名

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

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

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

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

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

因此,考虑到以上所有情况,问题是:如果我看不到甚至没有将其添加到项目的引用列表中,我如何才能为 mscorlib 指定一个外部别名?

最佳答案

答案与 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;

关于c# - 如何为 mscorlib 创建外部别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27589528/

相关文章:

c# - 为什么 DateTime.ToLocalTime() 不考虑夏令时?

c# - Exchange Web 服务 - 获取附件始终为空

.net - 诊断 SqlConnection 泄漏?

c - Visual Studio 2017 srand() 崩溃(在线编译器有效)

c# - 从 Visual Studio 2015 发布 C# 项目无效 list

c# - WPF XAML 合并默认命名空间定义

javascript - 如何在 Visual Studio 中从数据库(使用 C#)获取数据时使 HTML 行可点击

c# - 如何确保用户提供的 url 不是本地路径?

.net - 如何在我的 .NET 应用程序中托管 HTML5?

c# - 给出十六进制颜色代码作为 gridview 背景颜色