在 MSBuild 中找出当前操作系统的“位”度
我有一个构建脚本,需要对可执行文件的路径进行硬编码。路径是:
- 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 位时我可以设置它?
I have a build script that needs to hard code a path to an executable. The path is:
- C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe
This has worked fine, but now I am running on a 64 bit OS (but my coworker and build server are on 32 bit still).
I need the path to be this for me:
- C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe
But use the normal path for the others.
Here is how I set it up:
<PropertyGroup>
<CabWiz>"C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe"</CabWiz>
</PropertyGroup>
Is there a condition I can put on that so that I can set it if the OS (not the current build configuration) is 64 bit?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
有一个注册表项可以告诉您当前操作系统的位数。以下是我在 MSBuild 文件中使用的属性:
There is a registry key that will tell you the bit-edness of the current OS. Here are the properties I use in my MSBuild files:
您正在使用位数来尝试猜测正确的 Program Files 文件夹,但不能保证它位于 C 驱动器上,甚至不能保证称为“Program Files”。您最好使用
$(MSBuildProgramFiles32)
属性(在 MSBuild 4.0 中)。You're using the bitness to try and guess the correct Program Files folder, but there's no guarantee that it's on the C drive, or even called "Program Files". You would be better using the
$(MSBuildProgramFiles32)
property (in MSBuild 4.0).在 64 位操作系统上,定义了以下变量:
因此只需测试
ProgramFiles(x86)
,如果它为空,则使用ProgramFiles
。On a 64-bit OS, the following variables are defined:
So just test for
ProgramFiles(x86)
and if it's empty, useProgramFiles
.如果您始终运行 32 位版本的 MSBuild,无论平台如何,那么这很简单:只需将“C:\Program Files”替换为“$(ProgramFiles)”即可。无论是在 32 位还是 64 位操作系统上,“$(ProgramFiles)”都应扩展到正确的文件夹位置(所有 32 位程序的位置)。
如果您在 64 位平台上运行 64 位版本的 MSBuild(这不太可能),那么事情会变得有点棘手。 '%ProgramFiles(x86)%' 环境变量似乎是您想要的,但祝您处理这些括号好运。更简单的方法可能是在条件中使用“%PROCESSOR_ARCHITECTURE%”环境变量。
If you're always running the 32-bit version of MSBuild, regardless of the platform, then it's easy: just substitute '$(ProgramFiles)' for 'C:\Program Files'. Whether on a 32-bit or 64-bit OS, '$(ProgramFiles)' should expand to the correct folder location (the location of all 32-bit programs).
If you're running the 64-bit version of MSBuild on 64-bit platforms (which is unlikely), then it gets a bit trickier. The '%ProgramFiles(x86)%' environment variable would seem to be what you want, but good luck dealing with those parentheses. Easier would probably be to use the '%PROCESSOR_ARCHITECTURE%' environment variable in a condition.
我们使用的解决方案依赖于MSBuild的最新功能;可以调用
来了解操作系统的位数:
Condition="'$([System.Environment]::Is64BitOperatingSystem)' == 'False'"
在 Windows 上测试,它也可以在 Linux 上运行。
此处 完整的项目。
The solution we used relies on latest features of MSBuild; it is possible to invoke
to understand the bitness of the Operating System:
Condition="'$([System.Environment]::Is64BitOperatingSystem)' == 'False'"
for 32 bit OSesCondition="'$([System.Environment]::Is64BitOperatingSystem)' == 'True'"
for 64 bit OSesTested on Windows, it can works on Linux too.
Here the full project.