引用的程序集返回None作为ProcessorArchitecture

时间:2016-04-29 18:22:09

标签: c# .net reflection 64-bit processor-architecture

我有一个Web项目,我使用Assembly.ReflectionOnlyLoadFrom(filename)加载了我的DLL。然后我拨打assembly.GetReferencedAssemblies();

返回的AssemblyName都将ProcessorArchitecture设置为None

主DLL的ProcessorArchitecture是x64,而引用在AnyCPU和x64之间变化。

知道为什么我无法为这些参考装配拾取ProcessorArchitecture吗?

更新:我刚刚看到这个link说明:

  

从.NET Framework 4开始,此属性始终返回ProcessorArchitecture.None作为参考程序集。

是否有其他方法可以获取此信息?

1 个答案:

答案 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;
}