6

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

  • 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

4 回答 4

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>
于 2010-12-02T23:33:25.540 回答
4

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

于 2010-12-07T20:37:04.733 回答
3

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

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

所以只需测试ProgramFiles(x86),如果它是空的,使用ProgramFiles.

于 2010-08-17T17:52:35.323 回答
1

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

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

于 2010-08-17T18:23:47.040 回答