代码之家  ›  专栏  ›  技术社区  ›  Dan Field

引用另一程序集中全局命名空间中的公共静态类

  •  1
  • Dan Field  · 技术社区  · 8 年前

    在C#中,是否有方法从程序集B访问程序集a中全局命名空间中的公共静态类(假设程序集B引用程序集a), 当程序集B在具有相同名称的全局命名空间中具有公共静态类时 Bar.cs 在组件A中:

    using System.Diagnostics;
    // NOTE: No namespace declared here - this is in the global:: ns
    public static class Bar
    {
        public static void DoSomethingSilly()
        {
            Debug.WriteLine("I'm silly!");
        }
    }
    

    我怎么能用这个 酒吧 在组件B中?

    public static class Bar
    {
        public static void DoSomethingSilly()
        {
            // call Bar.DoSomethingSilly() from assembly A here
        }
    }
    

    我试过这样的事情 global::Bar.DoSomethingSilly() ,这在程序集B中不起作用(它只是将引用返回到程序集B)。

    Assembly.GetType() ),但我更想知道是否有一些本机C#语法。最后,我在程序集a中的代码周围添加了一个名称空间,我拥有该名称空间,它只在全局名称空间中,因为它是由另一个工具生成的-添加名称空间并没有造成任何问题,但我很好奇是否有语法允许这种引用。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Dan Field    8 年前

    感谢@Jon Skeet为我们提供了这个方向-extern alias是我们能够做到这一点的原因。在程序集引用的属性上,添加别名(例如 assemblyA ,或在从 here FooVersion1 ):

    property window example

    ,并在.cs文件的顶部添加:

    extern alias assemblyA;
    

    这将允许:

    assemblyA::Foo.DoSomethingSilly();
    assemblyA.Foo.DoSomethingSilly();
    

    我仍然继续在生成的代码中添加名称空间-这更简单,避免了污染全局名称空间。