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

时间:2009-07-01 06:24:58

标签: c# .net msbuild namespaces assembly-resolution

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

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

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

2 个答案:

答案 0 :(得分:10)

我认为您应该使用extern alias将程序集名称空间包装在Global名称空间之外。方法如下:

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

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

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

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

答案 1 :(得分:1)

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