GetAssemblyName()失败,而同一程序集上的ReflectionOnlyLoadFrom()成功吗?

时间:2019-06-30 15:10:40

标签: c# .net

我遇到了许多程序集,其中AssemblyName.GetAssemblyName()失败,而同一程序集上的Assembly.ReflectionOnlyLoadFrom()成功。这些往往是NET Core程序集。

是一个例子
 System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e

在我的机器上,具有相同全名的程序集具有3个不同的文件版本(FV)和ProcessorArchitecture(PA)

 FV=4.6.26515.07   PA=X86     // GetAssemblyName always fails, ReflectionOnlyLoadFrom succeeds when its own PA=X86 
 FV=4.6.27317.03   PA=Amd64   // GetAssemblyName always fails, ReflectionOnlyLoadFrom succeeds when its own PA=MSIL or Amd64 
 FV=4.6.25718.00   PA=Amd64   // GetAssemblyName always succeeds

当我在所有三个文件版本上运行ildasm时,所有文件都可以正常加载并显示正确的清单和CLR Header,这意味着它们都是CLR程序集。但是,GetAssemblyName()每次都在前两个失败。但是,只要您使用与System.Private.CoreLib的ProcessorArchitecture匹配的ProcessorArchitecture编译执行程序集,即X86或Amd64,ReflectionOnlyLoadFrom()就会在前两个成功执行。对于其他类型的程序集,ReflectionOnlyLoadFrom()并不关心它们的ProcessorArchitecture,但对于这种类型,它确实如此。另外,为什么在ildasm可接受的有效程序集上GetAssemblyName()失败?

0 个答案:

没有答案