如何将特定的Windows SDK与MSBuild一起使用? 我有一个由许多C++和C项目组成的大项目,MSBug(3.5)脚本来构建整个项目。此脚本基于(C++项目)和(C#项目)任务。它是由一个组织定期执行的

如何将特定的Windows SDK与MSBuild一起使用? 我有一个由许多C++和C项目组成的大项目,MSBug(3.5)脚本来构建整个项目。此脚本基于(C++项目)和(C#项目)任务。它是由一个组织定期执行的,msbuild,compilation,winapi,Msbuild,Compilation,Winapi,我希望能够选择用于编译的特定Windows SDK(v6.0A、v7.0、v7.1…)。由于我的存储库中有许多分支最终需要不同的SDK版本,因此我需要在每次编译之前选择正确的分支 在我的计算机上,我已经能够设置一个批处理脚本,在启动MSBuild脚本之前调用正确的SetEnv.cmd。但此解决方案在CI服务器上不可用,因为直接执行MSBuild脚本 您知道在MSBuild下实现等效于SetEnv.cmd的方法吗?您可以创建一个自定义MSBuild任务,该任务使用Environment.SetEn

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

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


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

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

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

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

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

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