找出“答案”;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
- 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的默认版本。见这里的评论: