了濃厚的興趣本和核實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