了浓厚的兴趣本和核实serveral的简单方法。在下面的代码中,主程序集引用了DummyDll.dll,它是针对此dll的1.0.0.2版构建的,但真正加载了1.0.0.3版。然后我尝试Mono.Cecil能,Assembly.GetReferencedAssemblies()和相同但反射只加载的程序集:
internal class Program {
private static void Main(string[] args) {
new Class1().Test(); // otherwise DummyDll will not be referenced.
var asm = Mono.Cecil.AssemblyDefinition.ReadAssembly(Assembly.GetEntryAssembly().Location);
foreach (var reference in asm.MainModule.AssemblyReferences) {
if (reference.FullName.Contains("DummyDll"))
Console.WriteLine(reference.FullName);
}
Console.WriteLine();
Console.WriteLine(typeof(Class1).Assembly.FullName);
Console.WriteLine();
foreach (var referenced in Assembly.GetEntryAssembly().GetReferencedAssemblies()) {
if (referenced.FullName.Contains("DummyDll"))
Console.WriteLine(referenced.FullName);
}
Console.WriteLine();
var asm2 = Assembly.ReflectionOnlyLoad(Assembly.GetEntryAssembly().FullName);
foreach (var referenced in asm2.GetReferencedAssemblies()) {
if (referenced.FullName.Contains("DummyDll"))
Console.WriteLine(referenced.FullName);
}
Console.ReadKey();
}
}
下面是结果:
DummyDll,版本= 1.0.0.2,文化=中性公钥=空
DummyDll,版本= 1.0.0.3,文化=中性公钥=空
DummyDll,版本= 1.0.0.2,文化=中性公钥=空
DummyDll,版本= 1.0.0。2,Culture = neutral,PublicKeyToken = null
结果显示全部三种方法产生相同的结果,那就是你需要的结果。只有显示加载程序集的实际版本的方法是typeof(Class1).Assembly。所以最简单的方法是使用Assembly.GetReferencedAssemblies()。
来源
2015-09-10 14:05:51
Evk
谢谢!我不知道Assembly.GetReferencedAssemblies()。 – Laurence