【发布时间】:2019-04-14 14:25:51
【问题描述】:
我们见过“从程序集中获取命名空间”——但是你怎么知道命名空间在哪个程序集中呢?我正在尝试获取所有类型的命名空间,为此我需要了解程序集,但程序集并不总是 Assembly.GetExecutingAssembly,我需要获取其中包含特定命名空间的所有程序集的列表.
我该怎么做
【问题讨论】:
标签: c#
我们见过“从程序集中获取命名空间”——但是你怎么知道命名空间在哪个程序集中呢?我正在尝试获取所有类型的命名空间,为此我需要了解程序集,但程序集并不总是 Assembly.GetExecutingAssembly,我需要获取其中包含特定命名空间的所有程序集的列表.
我该怎么做
【问题讨论】:
标签: c#
您无法事先知道程序集中定义了哪些命名空间(不是直接知道;为此,您需要反编译器和文件解析器来检查它们的命名空间)。
你可以做的是加载所有你想要的程序集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));
}
【讨论】:
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); 只是在这种情况下列表还将包含系统 DLL 之类的东西(例如 System.Runtime / System.IO)