如何在C#中使用命名空间别名运算符::?

16

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

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

CS0432 - 找不到别名

通常的“.”运算符也失败了。

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

非常感谢任何关于我下一步可以尝试的指针。


通常的“.”运算符也失败了。你能详细说明一下吗?如果你输入整个命名空间,它是可以工作的。 - Grzenio
4个回答

17
extern alias alias1;
using alias1::Namespace;

这可以用作解决 CS0433(C#编译器错误)的方法。http://msdn.microsoft.com/zh-cn/library/64wh5743(VS.100).aspx - RandomNickName42
我刚注意到,“Gortok”的问题中只有一个错误号码,真有趣。 - RandomNickName42
2
而且,您还需要将程序集引用属性“Aliases”从“global”更改为“global,alias1”。 - Spiralis

4

试试这个:

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;
        }
    }
}

在项目引用中为assembly1添加global,asm1,为assembly2添加global,asm2


3

我认为你需要使用一个extern aliasAnson Horton 在他的博客中讲解了这个问题以及如何使用extern alias来解决它。


-1

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

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

或者:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接