我有一个Web项目,我使用Assembly.ReflectionOnlyLoadFrom(filename)
加载了我的DLL。然后我拨打assembly.GetReferencedAssemblies();
。
返回的AssemblyName
都将ProcessorArchitecture
设置为None
。
主DLL的ProcessorArchitecture是x64,而引用在AnyCPU和x64之间变化。
知道为什么我无法为这些参考装配拾取ProcessorArchitecture吗?
更新:我刚刚看到这个link说明:
从.NET Framework 4开始,此属性始终返回ProcessorArchitecture.None作为参考程序集。
是否有其他方法可以获取此信息?
答案 0 :(得分:1)
我有这个问题;我最终使用的代码如下所示:
static void Main() {
// Load assembly. This can either be by name, or by calling GetReferencedAssemblies().
Assembly referencedAssembly = Assembly.Load("AssemblyName");
// Get the PEKind for the assembly, and handle appropriately
PortableExecutableKinds referenceKind = GetPEKinds(referencedAssembly);
if((referenceKind & PortableExecutableKinds.Required32Bit) > 0) {
// is 32 bit assembly
}
else if((referenceKind & PortableExecutableKinds.PE32Plus) > 0) {
// is 64 bit assembly
}
else if((referenceKind & PortableExecutableKinds.ILOnly) > 0) {
// is AnyCpu
}
}
static PortableExecutableKinds GetPEKinds(Assembly assembly) {
PortableExecutableKinds peKinds;
ImageFileMachine imageFileMachine;
assembly.GetModules()[0].GetPEKind(out peKinds, out imageFileMachine);
return peKinds;
}