在另一个程序集中的全局命名空间中引用 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();
我仍然为生成的代码添加命名空间 - 它更直接并且避免污染全局命名空间。
在 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();
我仍然为生成的代码添加命名空间 - 它更直接并且避免污染全局命名空间。