天天看點

檢查.net dll建構的目标平台是any cpu、x86、x64

原文: 檢查.net dll建構的目标平台是any cpu、x86、x64

有時候,需要檢查建構的dll是否針對正确的平台

可以使用CorFlags.exe(它是.NET Framework SDK的一部分)從dll中查找此資訊。運作CorFlags.exe将産生以下輸出:

>> CorFlags "C:\example.dll"

Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.6.1590.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x3
ILONLY    : 1
32BITREQ  : 1
32BITPREF : 0
Signed    : 0      

我們需要關注的兩個參數是“PE”和“32BITREQ”​​

Any CPU PE: PE32, 32BITREQ: 0
x86 PE: PE32, 32BITREQ: 1
x64 PE: PE32+, 32BITREQ: 0

要以程式設計方式确定目标平台,我們可以使用Module.GetPEKind()

Assembly a = Assembly.ReflectionOnlyLoadFrom(@"C:\example.dll");
 
PortableExecutableKinds peKind;
ImageFileMachine machine;
 
a.ManifestModule.GetPEKind(out peKind, out machine);
 
Console.WriteLine(peKind);      

peKind的結果可以解釋為:

ILOnly
ILOnly, Required32Bit
ILOnly, PE32Plus
示例

翻譯:https://malvinly.com/2016/11/16/check-whether-a-net-dll-is-built-for-any-cpu-x86-or-x64/