我有一个由许多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
的方法吗?
答案 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过程中获取正确的环境变量。