【问题标题】:How to get the namespace alias operator :: to work under C#?如何让命名空间别名运算符 :: 在 C# 下工作?
【发布时间】:2010-10-11 18:30:38
【问题描述】:

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

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

CS0432 - Alias not found

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

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

非常感谢任何关于我接下来可以尝试的建议。

【问题讨论】:

  • "通常的 . 运算符也失败了。"你能扩展这个吗?如果您键入整个命名空间,它确实有效

标签: c# .net namespaces alias


【解决方案1】:
extern alias alias1;
using alias1::Namespace;

【讨论】:

  • 这可用于解决 CS0433(C# 编译器错误)的方法。 msdn.microsoft.com/en-us/library/64wh5743(VS.100).aspx
  • 我刚刚注意到,这是来自“Gortok's”问题的 1 个错误号,很有趣。
  • 而且,您还需要将程序集引用属性“别名”从“全局”更改为“全局,别名 1”。
【解决方案2】:

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

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

或:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案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;
              }
          }
      }
      

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

      【讨论】:

        猜你喜欢
        • 2012-07-06
        • 2012-08-22
        • 1970-01-01
        • 2020-05-11
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        • 2010-09-15
        • 1970-01-01
        相关资源
        最近更新 更多