如何在MSBuild中使用特定的Windows SDK?

Mac*_*Mac 5 msbuild winapi compilation

我有一个由许多C ++和C#项目组成的大型项目,还有一个MSBuild(3.5)脚本来构建整个程序。该脚本基于VCBuild(C ++项目)和MSBuild(C#项目)任务。它由Continuous Integration服务器定期执行。

我希望能够选择要用于编译的特定Windows SDK(v6.0A,v7.0,v7.1 ...)。由于我的存储库中有很多分支,最终需要使用不同的SDK版本,因此我需要一种在每次编译之前选择正确分支的方法。

在我的计算机上,我已经能够设置SetEnv.cmd在启动MSBuild脚本之前调用正确的批处理脚本。但是,由于直接执行MSBuild脚本,因此该解决方案无法在CI服务器上使用。

您知道SetEnv.cmd在MSBuild下达到等同效果的方法吗?

Mac*_*Mac 1

我最终创建了一个自定义 MSBuild 任务,该任务将批处理文件名作为参数,执行以下命令行(作为batch.cmd参数):

cmd.exe /E:ON /V:ON /S /C "batch.cmd > nul && SET"
Run Code Online (Sandbox Code Playgroud)

然后解析输出,并为当前进程相应地设置环境变量。

这样,我就可以SetEnv.cmd在 MSBuild 进程中执行并获取正确的环境变量。