.netassembliesx8664-bitx86-64

How can I determine if a .NET assembly was built for x86 or x64?


I've got an arbitrary list of .NET assemblies.

I need to programmatically check if each DLL was built for x86 (as opposed to x64 or Any CPU). Is this possible?


Solution

  • Look at System.Reflection.AssemblyName.GetAssemblyName(string assemblyFile).

    You can examine assembly metadata from the returned AssemblyName instance:

    Using PowerShell:

    [36] C:\> [reflection.assemblyname]::GetAssemblyName("${pwd}\Microsoft.GLEE.dll") | fl
    
    Name                  : Microsoft.GLEE
    Version               : 1.0.0.0
    CultureInfo           :
    CodeBase              : file:///C:/projects/powershell/BuildAnalyzer/...
    EscapedCodeBase       : file:///C:/projects/powershell/BuildAnalyzer/...
    ProcessorArchitecture : MSIL
    Flags                 : PublicKey
    HashAlgorithm         : SHA1
    VersionCompatibility  : SameMachine
    KeyPair               :
    FullName              : Microsoft.GLEE, Version=1.0.0.0, Culture=neut...
    

    Here, ProcessorArchitecture identifies the target platform.

    I'm using PowerShell in this example to call the method.