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

时间:2016-10-06 21:19:37

标签: c# .net namespaces .net-assembly

在C#中,有没有办法从程序集B访问程序集A中的全局命名空间中的公共静态类(假设程序集B引用程序集A),当程序集B在全局名称空间中具有公共静态类时具有相同的名称?例如,在程序集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中添加了一个命名空间,它是我拥有的,并且只在全局命名空间中,因为它是由另一个工具生成的 - 添加命名空间不会导致任何问题,但我很好奇是否有语法允许这种引用。

1 个答案:

答案 0 :(得分:0)

感谢@Jon Skeet这个方向 - 外部别名是什么可以使这项工作。在引用程序集的属性上,添加别名(例如assemblyA或在here FooVersion1中截取的屏幕截图中):

property window example

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

extern alias assemblyA;

然后允许:

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

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