获取控制台应用程序中引用的项目的所有名称空间

时间:2011-01-08 18:06:35

标签: .net assemblies

我有一个控制台应用程序,我向这个控制台应用程序添加了对2个项目的引用,CustomerService.DataAccess和CustomerService.Business,现在,当控制台应用程序运行时,我想获得2个项目中的所有命名空间我添加到控制台应用程序。 Thankx。

1 个答案:

答案 0 :(得分:0)

为此,您需要先获取引用的程序集,然后从该程序集中的所有类型中获取名称空间集。

AssemblyName[] referencedAssemblies = GetType().Assembly.GetReferencedAssemblies();
HashSet<string > namespaces = new HashSet<string>();

foreach (AssemblyName referencedAssembly in referencedAssemblies)
{
    Assembly reference = Assembly.Load(referencedAssembly);

    if (!reference.GlobalAssemblyCache)
    {
        HashSet<string> refernceNamespaces = new HashSet<string>(
            reference.GetTypes().Select(t => t.Namespace).Where(ns => ns != null));
        namespaces.UnionWith(refernceNamespaces);
    }
}

上面的代码将获取不在GAC中的引用程序集中的所有名称空间。如果您只想获取特定程序集中的名称空间,可以只检查AssemblyName.Name属性以确保检查正确的程序集。