[英]c# getting ALL namespaces from a .dll
在 DLL (GUI) 中,我需要获取当前应用程序中所有命名空间的列表(例如,如果我将 DLL 绑定到名为“Hundekuchen”的项目中,它应该列出
{ "GUI", "Hundekuchen" }
有没有内置的 function 呢?
没有内置 function,但是可以枚举程序集中的类型,并获取它们的命名空间。
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);
}
您可以获取 AppDomain 中所有程序集的列表,然后是所有加载程序集中的所有类,但是您必须过滤掉您不想看到的那些,因为有很多从 mscorlib 和系统库链接的程序集. 这是一个快速而肮脏的(使用 .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("<"));
查看System.Reflection
命名空间,在这里您可以找到检索有关程序集的信息的功能。
这可能不是您所需要的,但它显示了您可以实现的目标,我正在获取当前执行程序集中的所有类型,迭代它们并打印出每种类型的命名空间。
foreach (Type t in Assembly.GetExecutingAssembly().GetTypes())
{
Console.WriteLine(t.Namespace);
}
只需检查Assembly
class,您就会找到解决问题的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.