【问题标题】:Find out the "Bit"ness of the current OS in MSBuild在 MSBuild 中找出当前操作系统的“位”
【发布时间】:2010-12-08 04:37:04
【问题描述】:

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

  • 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 位,我可以设置一个条件吗?

【问题讨论】:

    标签: msbuild 64-bit msbuild-propertygroup


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          猜你喜欢
          • 2017-09-15
          • 1970-01-01
          • 1970-01-01
          • 2010-09-11
          • 2011-02-20
          • 1970-01-01
          • 2010-11-06
          • 2013-08-29
          • 2012-09-22
          相关资源
          最近更新 更多