在2个.NET程序集中使用相同名称和命名空间的类型

出于好奇,我创建了两个程序集,它们都有一个类( Class1 ),具有完全相同的命名空间( Library1 )。 然后,我创建另一个引用这2个程序集的客户端,并尝试创建Class1的实例。

毫不奇怪,编译器给出了关于模糊引用的编译错误。 有没有办法明确指定我想要使用的程序集中的类型以避免歧义?

注意:我很少知道,如果有的话,在实践中发生。 这只是一个关于语言特征的好奇心的问题。

我认为您应该使用extern别名将程序集名称空间包装在Global名称空间之外。 这是如何做:

  1. 在引用2个程序集的项目中,在“引用”下选择其中一个,并在“属性”窗口中将“ global别名”值更改为global ,例如global, Library1a

  2. 对另一个参考做同样的事情,但给它一个不同的别名 – 让我们用global, Library1b作为我们的例子。

  3. 插入extern alias Library1a; 和/或extern alias Library1b; 作为使用程序集的任何类的前2行。

  4. 访问不明确的成员时,使用Library1a.限定命名空间Library1a.Library1b. 。 示例: Library1a.Library1.Class1... Library1b.Library1.Class1...

它在实践中发生并且是一种真正的痛苦,外部别名并不总能解决问题。 以下是一个重复名称复制问题的示例 。