如何让命名空间别名operator ::在C#下工作?

当我引用两个具有相同命名空间和类型名称的外部程序集时,我遇到了不太可能发生的情况。 当我尝试使用该类型时,编译器抛出一个错误,它无法解析我想要使用的那个。

我看到C#提供了一种为引用使用别名的机制。 您甚至可以通过Visual Studio 2008中引用的“ Property窗口指定这些别名。如何在代码中使用此别名? 据我所知,我应该使用::运算符,但它失败并出现以下错误:

CS0432 - Alias not found

通常的. 运营商也失败了。

在输出窗口中,我看到编译器在其命令行中正确传递了别名。

关于我接下来可能尝试的任何指示都非常感谢。

 extern alias alias1; using alias1::Namespace; 

试试这个:

 extern alias asm1; extern alias asm2; namespace Client { class Program { static void Main(string[] args) { asm1.MyNs.MyClass mc1 = null; asm2.MyNs.MyClass mc2 = null; } } } 

并将global,asm1添加到assembly1和global,asm2的项目引用global,asm2 for assembly2

我认为你需要使用extern别名 。 Anson Horton有一个关于这个问题的好博客,以及如何使用extern别名来修复它。

当您在项目中引用某个程序集时,它具有默认别名“global”。 当您为该程序集添加另一个别名时,例如“global,AssemblyA”,您将像这样引用它:

 using SomeTypeAlias = AssemblyA::Company.Product.SomeType; 

要么:

 void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... }