2016-04-29 2 views
2

У меня есть веб-проект, DLL которого я загружаю, используя Assembly.ReflectionOnlyLoadFrom(filename). Затем я звоню assembly.GetReferencedAssemblies();.Реферированные сборки не возвращаются Нет как ProcessorArchitecture

Возврат AssemblyName s все имеют ProcessorArchitecture, установленный в None.

Основная архитектура архитектуры DLL - x64, а ссылки различаются между AnyCPU и x64.

Любая идея, почему я не могу получить ProcessorArchitecture для этих сборок ссылок?

UPDATE: Я только что видел это link заявив:

Начиная с .NET Framework 4, это свойство всегда возвращает ProcessorArchitecture.None для опорных узлов.

Есть ли другой способ получить эту информацию?

+1

вы пробовали [Module.GetPEKind()] (https://msdn.microsoft.com/en-us/library/system.reflection. module.getpekind (v = vs.110) .aspx)? – elchido

ответ

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