Shi*_*mmy 17 .net c# reflection .net-assembly
有没有办法获得依赖于给定程序集的所有程序集?
伪:
Assembly a = GetAssembly();
var dependants = a.GetDependants();
Run Code Online (Sandbox Code Playgroud)
Cri*_*scu 17
如果您希望从当前应用程序域中找到依赖程序集,可以使用类似GetDependentAssemblies下面定义的函数:
private IEnumerable<Assembly> GetDependentAssemblies(Assembly analyzedAssembly)
{
return AppDomain.CurrentDomain.GetAssemblies()
.Where(a => GetNamesOfAssembliesReferencedBy(a)
.Contains(analyzedAssembly.FullName));
}
public IEnumerable<string> GetNamesOfAssembliesReferencedBy(Assembly assembly)
{
return assembly.GetReferencedAssemblies()
.Select(assemblyName => assemblyName.FullName);
}
Run Code Online (Sandbox Code Playgroud)
该analyzedAssembly参数表示要为其查找所有依赖项的程序集.
以编程方式,您可以使用Mono.Cecil执行此操作.
这样的事情(请注意,如果连接调试器,这将无效 - 例如,如果您从VS内部运行它):
public static IEnumerable<string> GetDependentAssembly(string assemblyFilePath)
{
//On my box, once I'd installed Mono, Mono.Cecil could be found at:
//C:\Program Files (x86)\Mono-2.10.8\lib\mono\gac\Mono.Cecil\0.9.4.0__0738eb9f132ed756\Mono.Cecil.dll
var assembly = AssemblyDefinition.ReadAssembly(assemblyFilePath);
return assembly.MainModule.AssemblyReferences.Select(reference => reference.FullName);
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要以编程方式执行此操作,那么NDepend或Reflector可以为您提供此信息.
| 归档时间: |
|
| 查看次数: |
11230 次 |
| 最近记录: |