当我引用两个具有相同命名空间和类型名称的外部程序集时,我遇到了不太可能发生的情况。当我尝试使用该类型时,编译器抛出一个错误,它无法解析我想要使用的那个。
我看到C#提供了一种为引用使用别名的机制。您甚至可以通过Visual Studio 2008中引用的Property
窗口指定这些别名。如何在代码中使用此别名?据我了解,我应该使用::
运算符,但它失败并出现以下错误:
CS0432 - Alias not found
通常的.
运算符也会失败。
在输出窗口中,我看到编译器在命令行中正确传递了别名。
非常感谢任何有关我接下来可能尝试的内容的指示。
答案 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
添加到assembly1的项目引用中,并将global,asm2
添加到assembly2
答案 2 :(得分:3)
我认为你需要使用 extern别名。 Anson Horton有一个关于此问题的好博客以及如何使用 extern别名来解决此问题。
答案 3 :(得分:-1)
当您在项目中引用某个程序集时,它具有默认别名“global”。为该程序集添加其他别名时,例如“global,AssemblyA”,你会像这样引用它:
using SomeTypeAlias = AssemblyA::Company.Product.SomeType;
或:
void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... }