如何为mscorlib创建一个extern别名

时间:2014-12-21 12:53:22

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

我有第三方lib,它提供 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中“

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

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

因此,考虑到以上所有问题,问题是:如何为mscorlib指定外部别名,因为我无法看到甚至不将它添加到项目的引用列表中?

1 个答案:

答案 0 :(得分:7)

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