查找当前操作系统在MSBuild中的“位数”

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位时进行设置?

5个回答

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>

4

您正在使用位数来猜测正确的“Program Files”文件夹,但并不能保证它在C驱动器上,甚至不一定叫做“Program Files”。建议您使用 $(MSBuildProgramFiles32) 属性(在 MSBuild 4.0 中)。


3
在64位操作系统上,以下变量已定义:
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)

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


1

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

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


现在运行64位版本的MSBuild已经不再是不可能的事情了,因为它是Team Build 2010的默认版本。请参见此处的评论:https://connect.microsoft.com/VisualStudio/feedback/details/591133/msbuild-64-bit-picks-up-the-wrong-extensions-path - Mark

0
我们使用的解决方案依赖于MSBuild的最新功能;可以调用它。
[System.Environment]::Is64BitOperatingSystem

了解操作系统的位数:
  • Condition="'$([System.Environment]::Is64BitOperatingSystem)' == 'False'" 适用于32位操作系统
  • Condition="'$([System.Environment]::Is64BitOperatingSystem)' == 'True'" 适用于64位操作系统
在Windows上测试通过,也可以在Linux上使用。 这里是完整的项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接