场景

  1. 在z项目里引用x和y项目,分别为x.dll和y.dll。
  2. 引入的class A在x.dll和y.dll都定义了,而且命名空间一样,然后x和y同时在z项目中被用到,z中想使用class A就会遇到这问题
  3. x项目中定义了class A,同时y项目中在csproj文件里用<Compile Include="..\x\A.cs">将其引入进来并重新编译。然后x和y同时在z项目中被用到,z中想使用class A时候就会同样遇到这问题。

解决方案

第一步,在z项目引入x和y的时候指定它的alias,如下:

<ProjectReference Include="..\ProjextX\ProjextX.csproj">
    <Project>{EE0F5BBF-54D4-40EB-BEB2-5D07A49BC5B8}</Project>
    <Name>ProjextX.ClassA</Name>
    <Aliases>ClassA</Aliases>
</ProjectReference>

第二步,在z项目中用到class A的地方,先在引用其他namespace之前加上extern alias,比如:

// 引入命名空间前
extern alias ProjextX;

// 调用的时候
private readonly ProjectZ::ProjextX.ClassA variable = new ProjectZ::ProjextX.ClassA();

注意的是,extern alias放在自己这个类的namespace定义外边还是里边效果是不一样的。

参考链接

https://blogs.msdn.microsoft.com/ansonh/2006/09/27/extern-alias-walkthrough/