在DLL(GUI)中,我需要获取当前Application中所有命名空间的List(例如,如果我将该DLL绑定到名为“Hundekuchen”的Project中,它应该列出
{ "GUI", "Hundekuchen" }
这是否有内置功能?
答案 0 :(得分: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);
}
答案 1 :(得分:6)
您可以获取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("<"));
答案 2 :(得分:1)
查看System.Reflection
命名空间,您可以在这里找到检索有关程序集信息的功能。
这可能不是你需要的,但它显示了你可以实现的东西,我在当前正在执行的程序集中获取所有类型,迭代它们并打印出每种类型的命名空间。
foreach (Type t in Assembly.GetExecutingAssembly().GetTypes())
{
Console.WriteLine(t.Namespace);
}
只需检查Assembly
课程,您就应该找到解决问题的方法。