سؤال

Can I find whether a .NET assembly has been specifically build for 32 or 64 bits using Mono.Cecil? Or any other way of finding out without having to load the assembly first.

هل كانت مفيدة؟

المحلول

Using mono-ceci, you can do this (the information is available module by module):

AssemblyDefinition asm = AssemblyFactory.GetAssembly("myassembly.dll");

foreach (ModuleDefinition module in asm.Modules)
{
    Console.WriteLine("Module " + module.Name);
    Console.WriteLine("IsPE64 " + module.Image.PEOptionalHeader.StandardFields.IsPE64);
}

نصائح أخرى

moduleDefinition.Architecture is of type TargetArchitecture witch is defined as:

public enum TargetArchitecture {
    I386,
    AMD64,
    IA64,
    ARMv7,
}

There is another property, moduleDefinition.Attributes of type ModuleAttributes:

[Flags]
public enum ModuleAttributes {
    ILOnly = 1,
    Required32Bit = 2,
    StrongNameSigned = 8,
    Preferred32Bit = 0x00020000,
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top