我有一个第三方库,它提供了一个 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/