我有一个构建脚本需要硬编码可执行文件的路径。路径是:
这个工作正常,但现在我在64位操作系统上运行(但我的同事和构建服务器仍然是32位)。
我需要这条路给我:
但是使用其他人的正常路径。
以下是我如何设置它:
<PropertyGroup>
<CabWiz>"C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe"</CabWiz>
</PropertyGroup>
是否存在我可以设置的条件,以便在操作系统(不是当前的构建配置)为64位时设置它?
答案 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%'环境变量。