在另一个程序集中的全局命名空间中引用 public static class

Reference a public static class in the global namespace in another assembly

在 C# 中,有没有办法从程序集 B 访问程序集 A 中全局命名空间中的 public 静态 class(假设程序集 B 引用程序集 A),当程序集 B 在具有相同名称 的全局命名空间中具有 public 静态 class 时?例如在程序集 A 中的 Bar.cs 中:

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 的 Bar.cs 中使用它?

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

我试过 global::Bar.DoSomethingSilly() 之类的东西,它在程序集 B 中不起作用(它只是让我返回对程序集 B 的引用)。

我也知道我可以使用反射来获取它(类似于 Assembly.GetType()),但我更想知道是否有一些原生的 C# 语法。最后,我在程序集 A 中的代码周围添加了一个命名空间,它是我拥有的,并且只在全局命名空间中,因为它是由另一个工具生成的——添加命名空间没有引起任何问题,但我很好奇是否有允许这种引用的语法。

感谢@Jon Skeet 的指导 - extern alias 可以使这项工作成功。在引用程序集的属性上,添加一个别名(例如 assemblyA,或在 here FooVersion1 截取的屏幕截图中:

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

extern alias assemblyA;

然后将允许:

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

我仍然为生成的代码添加命名空间 - 它更直接并且避免污染全局命名空间。