找出“答案”;Bit";MSBuild中当前操作系统的可用性

找出“答案”;Bit";MSBuild中当前操作系统的可用性,msbuild,64-bit,msbuild-propertygroup,Msbuild,64 Bit,Msbuild Propertygroup,我有一个构建脚本,需要硬编码到可执行文件的路径。路径是: C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe 这很好,但现在我运行的是64位操作系统(但我的同事和构建服务器仍然使用32位操作系统) 我需要的路径是: C:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.e

我有一个构建脚本,需要硬编码到可执行文件的路径。路径是:

  • C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe
这很好,但现在我运行的是64位操作系统(但我的同事和构建服务器仍然使用32位操作系统)

我需要的路径是:

  • C:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe
但对其他人使用正常路径

下面是我如何设置它的:

<PropertyGroup>
    <CabWiz>"C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe"</CabWiz>
</PropertyGroup>

“C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe”

如果操作系统(不是当前的构建配置)是64位的,是否有一个条件可以设置它?

在64位操作系统上,定义了以下变量:

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

因此,只需测试
ProgramFiles(x86)
,如果它是空的,则使用
ProgramFiles

如果您总是运行32位版本的MSBuild,而不考虑平台,那么很简单:只需将“$(ProgramFiles)”替换为“C:\ProgramFiles”。无论是在32位还是64位操作系统上,“$(ProgramFiles)”都应扩展到正确的文件夹位置(所有32位程序的位置)


如果您在64位平台上运行64位版本的MSBuild(这不太可能),那么它会变得有点棘手。“%ProgramFiles(x86)%”环境变量似乎是您想要的,但祝您在处理这些括号时好运。在某种条件下使用“%PROCESSOR\u ARCHITECTURE%”环境变量可能更容易。

有一个注册表项,它将告诉您当前操作系统的位。以下是我在MSBuild文件中使用的属性:

<PropertyGroup>
        <MachineProcessorArchitecture>$(registry:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment@PROCESSOR_ARCHITECTURE)</MachineProcessorArchitecture>
        <Is32Bit>False</Is32Bit>
        <Is32Bit Condition="'$(MachineProcessorArchitecture)' == 'x86'">True</Is32Bit>
        <Is64Bit>False</Is64Bit>
        <Is64Bit Condition="'$(MachineProcessorArchitecture)' == 'AMD64'">True</Is64Bit>
</PropertyGroup>

$(注册表:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment@PROCESSOR_ARCHITECTURE)
假的
真的
假的
真的

您正在使用bitness来尝试猜测正确的Program Files文件夹,但无法保证它在C驱动器上,甚至被称为“Program Files”。您最好使用
$(MSBuildProgramFiles32)
属性(在MSBuild 4.0中)。

运行64位版本的MSBuild不再是不可能的,因为它是Team Build 2010的默认版本。见这里的评论: