我遇到了许多程序集,其中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()失败?