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

发布于 2024-10-10 16:48:19 字数 150 浏览 3 评论 0原文

我有一个控制台应用程序,并且我向该控制台应用程序添加了对 2 个项目(CustomerService.DataAccess 和 CustomerService.Business)的引用,现在,当控制台应用程序运行时,我希望获取我添加到的 2 个项目中的所有命名空间控制台应用程序。谢谢。

I have a console app and I added a reference to 2 projects to this console app, CustomerService.DataAccess and CustomerService.Business, Now, when the console app runs i would like to get all namespaces that are in the 2 projects that i added to the console app. Thankx.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盛夏尉蓝 2024-10-17 16:48:19

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

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 属性,以确保您正在检查正确的程序集。

To do this, you need to first get the referenced assemblies, and then get the set of namespaces from all of the types in that assembly.

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);
    }
}

The code above will get all of the namespaces in referenced assemblies that are not in the GAC. If you only want to get the namespaces in your specific assemblies, you can just check the AssemblyName.Name property to make sure you are inspecting the correct assemblies.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文