要查詢 .NET 組件的平台目標 (Platform Target,AnyCPU、x32 或 x64),我過去都是用 .NET Framework SDK 的 CoreFlags.exe。但實務上有些不方便,第一是 .NET Framework SDK 安裝目錄通常不包含在 PATH 環境變數,直接在 DOS 視窗輸入 corflags 會找不到程式,得改開啟 Developer Command Prompt for Visual Studio;第二種狀況是測試台或正式台伺服器未必有裝 .NET Framework SDK,遇到問題想現場檢測時常無工具可用。

仔細想想,這種臨時性小需求改用 PowerShell 才是王道。PowerShell 為 Windows 內建,不需事先安裝或複製工具程式,開個 DOS 視窗輸入 PowerShell 就可以敲指令做事,如果抄起地上樹枝就能對決一樣瀟灑,哈!

原理很簡單,PowerShell 可直接使用 .NET 元件,System.Reflection 命名空間有個 AssemblyName.GetAssemblyName(String) 方法,輸入完整 DLL/EXE 路徑,即可取得完整組件資訊,串接 Format-List 顯示 AssemblyName 物件所有屬性,其中 ProcessorArchitecture 屬性為 ProcessorArchitecture 列舉,可用來判斷組件是 x64、x86 或 AnyCPU,其中 Amd64 表示 x64、X86 代表 x86,MSIL 則為 AnyCPU。

完整指令範例如下:($ 會傳回目前所在路徑,Format-List 可簡寫為 fl )

[System.Reflection.AssemblyName]::GetAssemblyName("${pwd}\Oracle.DataAccess.dll") | Format-List

實測結果:(AssemblyName 物件還有個 FullName (強式名稱)屬性,處理繫結重新導向時可參考)

又學會一招!

Tips of using PowerShell to query the platform target of .NET assembly.


Comments

Be the first to post a comment

Post a comment