场景
- 在z项目里引用x和y项目,分别为x.dll和y.dll。
- 引入的class A在x.dll和y.dll都定义了,而且命名空间一样,然后x和y同时在z项目中被用到,z中想使用class A就会遇到这问题
- 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/