【问题标题】:C# get assembly based on namespaceC#根据命名空间获取程序集
【发布时间】:2019-04-14 14:25:51
【问题描述】:

我们见过“从程序集中获取命名空间”——但是你怎么知道命名空间在哪个程序集中呢?我正在尝试获取所有类型的命名空间,为此我需要了解程序集,但程序集并不总是 Assembly.GetExecutingAssembly,我需要获取其中包含特定命名空间的所有程序集的列表.

我该怎么做

【问题讨论】:

    标签: c#


    【解决方案1】:

    您无法事先知道程序集中定义了哪些命名空间(不是直接知道;为此,您需要反编译器和文件解析器来检查它们的命名空间)。

    你可以做的是加载所有你想要的程序集System.Reflection.Assembly Load(pathToAssembly),然后通过它们的.DefinedTypes()来过滤你想要的命名空间。

    为您当前的项目加载所有程序集:

    List<Assembly> assemblies = new List<Assembly>();
    string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    foreach (var path in Directory.GetFiles(assemblyFolder, "*.dll"))
    {
        assemblies.Add(Assembly.LoadFrom(path));
    }
    

    【讨论】:

    • 我没有 pathToAssembly,我只是在使用 unity,如何获取所有活动的程序集并选择具有我想要的命名空间的程序集?
    • 我更新了我的答案,为当前正在运行的项目加载所有程序集
    • 虽然我用的是unity,但我认为没有assemblyFolder,尤其是在我构建应用程序时,是否可以在不参考目录的情况下完成?
    • 你可以这样做然后var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); 只是在这种情况下列表还将包含系统 DLL 之类的东西(例如 System.Runtime / System.IO)
    • @bluejayke 对你有用吗?
    猜你喜欢
    • 2010-09-10
    • 1970-01-01
    • 2015-08-23
    • 2010-10-13
    • 2021-01-04
    • 2010-09-23
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多