在DLL(GUI)中,我需要获取当前Application中所有命名空间的List(例如,如果我将该DLL绑定到名为"Hundekuchen"的Project中,它应该列出
{ "GUI", "Hundekuchen" }
Run Code Online (Sandbox Code Playgroud)
这有什么内置功能吗?
car*_*ira 11
没有内置函数,但您可以枚举程序集中的类型,并获取它们的名称空间.
Assembly asm = typeof(MyApplication).Assembly;
List<string> namespaces = new List<string>();
foreach (var type in asm.GetTypes())
{
string ns = type.Namespace;
if (!namespaces.Contains(ns))
{
namespaces.Add(ns);
}
}
foreach (var ns in namespaces)
{
Console.WriteLine(ns);
}
Run Code Online (Sandbox Code Playgroud)
您可以获取AppDomain中所有程序集的列表,然后获取所有已加载程序集中的所有类,但是您必须过滤掉您不希望看到的程序集,因为mscorlib和System库中链接了许多程序集. .这是一个快速而肮脏的(使用.NET 3.5) - 如果您链接其他您不想看到的库,则可能需要过滤掉一些:
var enumerable = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Select(type => type.Namespace)
.Distinct()
.Where(name => name != null &&
!name.StartsWith("System") &&
!name.StartsWith("Microsoft") &&
!name.StartsWith("MS.") &&
!name.StartsWith("<"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6634 次 |
| 最近记录: |