在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中添加了一个命名空间,它是我拥有的,并且只在全局命名空间中,因为它是由另一个工具生成的 - 添加命名空间不会导致任何问题,但我很好奇是否有语法允许这种引用。
答案 0 :(得分:0)
感谢@Jon Skeet这个方向 - 外部别名是什么可以使这项工作。在引用程序集的属性上,添加别名(例如assemblyA
或在here FooVersion1
中截取的屏幕截图中):
,并在.cs文件的顶部添加:
extern alias assemblyA;
然后允许:
assemblyA::Foo.DoSomethingSilly();
assemblyA.Foo.DoSomethingSilly();
我仍然要为生成的代码添加命名空间 - 它更直接,避免污染全局命名空间。