繁体   English   中英

c# 从 a.dll 获取所有命名空间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM