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

时间:2010-06-10 15:26:44

标签: msbuild compilation winapi

我有一个由许多C ++和C#项目组成的大型项目,以及一个用于构建整个项目的MSBuild(3.5)脚本。此脚本基于VCBuild(C ++项目)和MSBuild(C#项目)任务。它由Continuous Integration server定期执行。

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

在我的计算机上,我可以在启动MSBuild脚本之前设置一个调用右SetEnv.cmd的批处理脚本。但是这个解决方案在CI服务器上不可用,因为MSBuild脚本是直接执行的。

您知道在MSBuild下实现等效SetEnv.cmd的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以创建一个自定义MSBuild任务,该任务使用Environment.SetEnvironmentVariable根据指定的平台SDK版本设置适当的环境变量值。检查vcvars32.bat(或vcvars64.bat,具体取决于您的目标配置)以查看需要设置的环境变量。

答案 1 :(得分:0)

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

cmd.exe /E:ON /V:ON /S /C "batch.cmd > nul && SET"

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

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