2010-08-31 100 views
2

在找到關於嘗試加載32位擴展的64位版本的MSBuild的my question的答案後,現在有必要確定64位或32位版本的MSBuild是否正在運行,因此我可以加載正確版本的DLL。MSBuild項目是否有任何方法來確定32位或64位版本的MSBuild是否正在運行?

我可以根據已知路徑列表檢查$(MSBuildBinPath)變量,但如果MSBuild從某個非標準位置運行,則該變量不起作用。這不是一個優雅的解決方案。

是否有一些方法可靠地確定當前運行的MSBuild(或其他託管MSBuild引擎的進程)是32位還是64位?

+0

您可以提供更多關於您正在嘗試執行的操作和/或調用MSBuild的詳細信息嗎? (這很重要,因爲程序調用基於對Microsoft.Build.x dll的引用) – 2010-08-31 19:04:29

+0

我只是從命令行運行MSBuild。我需要知道是否加載擴展的32位或64位版本,因爲MSBuild總是試圖從32位擴展路徑加載它(有關該特定錯誤的更多詳細信息,請參閱引用的問題)。 – Mark 2010-08-31 19:20:13

+0

在這種情況下,它只是您調用的任何版本。如果您從C:\ windows \ microsoft.net \ framework ....文件夾中調用MSBuild.exe,那麼您打到32位。如果它來自「Framework64」,則比它的6​​4位版本。 – 2010-08-31 21:05:07

回答

1

你有沒有考慮寫一個自定義的MSBuild任務,返回當前進程的位數

查看How to detect Windows 64-bit platform with .NET?舉例。

+0

是的,我相信這將是唯一的方法......如果只有某件事情不需要一個全新的任務...... – Mark 2010-09-27 13:58:20

+0

如果你使用的是MSBuild 4.0,你可以編寫一個內聯任務(http ://msdn.microsoft.com/en-us/library/dd722601.aspx)。這將節省您不得不創建自定義任務程序集。 – 2010-09-27 14:49:08

-1

Find out the "Bit"ness of the current OS in MSBuild上有個相關問題。在這個問題有一個由Blindy一個答案,指出:


在64位操作系統,以下變量定義:

ProgramFiles=C:\Program Files 
ProgramFiles(x86)=C:\Program Files (x86) 

ProgramFiles(x86)所以只是測試,如果它是空的,使用ProgramFiles

+0

我不在乎位目前的操作系統是,我需要當前* PROCESS *的位數。 – Mark 2010-09-01 14:41:29

相關問題