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

时间:2009-03-06 14:46:46

标签: c# .net namespaces alias

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

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

  

CS0432 - Alias not found

通常的.运算符也会失败。

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

非常感谢任何有关我接下来可能尝试的内容的指示。

4 个答案:

答案 0 :(得分:17)

extern alias alias1;
using alias1::Namespace;

答案 1 :(得分:3)

试试这个:

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添加到a​​ssembly1的项目引用中,并将global,asm2添加到a​​ssembly2

答案 2 :(得分:3)

我认为你需要使用 extern别名Anson Horton有一个关于此问题的好博客以及如何使用 extern别名来解决此问题。

答案 3 :(得分:-1)

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

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

或:

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