找出MSBuild中当前操作系统的“位”

时间:2010-08-17 17:41:51

标签: msbuild 64-bit msbuild-propertygroup

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

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

这个工作正常,但现在我在64位操作系统上运行(但我的同事和构建服务器仍然是32位)。

我需要这条路给我:

  • C:\ Program Files (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>

是否存在我可以设置的条件,以便在操作系统(不是当前的构建配置)为64位时设置它?

4 个答案:

答案 0 :(得分:7)

有一个注册表项可以告诉您当前操作系统的位编辑。以下是我在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>

答案 1 :(得分:3)

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

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

所以只需测试ProgramFiles(x86),如果它为空,请使用ProgramFiles

答案 2 :(得分:3)

您正在使用该位来尝试猜测正确的Program Files文件夹,但不能保证它位于C盘上,甚至称为“Program Files”。您最好使用$(MSBuildProgramFiles32)属性(在MSBuild 4.0中)。

答案 3 :(得分:1)

如果您始终运行32位版本的MSBuild,无论使用何种平台,那么很容易:只需将'$(ProgramFiles)'替换为'C:\ Program Files'即可。无论是在32位还是64位操作系统上,'$(ProgramFiles)'都应该扩展到正确的文件夹位置(所有32位程序的位置)。

如果您在64位平台上运行64位版本的MSBuild(这不太可能),那么它会变得有点棘手。 '%ProgramFiles(x86)%'环境变量似乎就是你想要的,但是好好处理这些括号。更容易在条件中使用'%PROCESSOR_ARCHITECTURE%'环境变量。