如何控制在.NET4和4.5RC之间使用哪个版本的msbuild文件?

Ter*_*wis 6 msbuild msdeploy visual-studio-2012

在我的开发笔记本电脑上,我只安装了VS2012 RC,并且我成功地从powershell(通过psake)挂钩到新的MSDeploy .pubxml管道(DeployOnBuild和PublishProfile设置),以将我的网站部署到我们的测试服务器.

但是,在我的构建服务器上,我最初安装了VS2010 SP1,而且我现在另外安装了2012 RC(我在这台机器上还有其他版本仍然是.NET 4).

当使用完全相同的参数运行相同的脚本时,我看到我的开发机器和构建服务器之间的结果不同.我正在运行的命令是

exec { msbuild "Website\WebSite.csproj" /m p:DeployOnBuild=True /p:PublishProfile=MyTestProfile }
Run Code Online (Sandbox Code Playgroud)

在构建服务器上,这实际上并不触发MSDeploy,而只是触发站点压缩并创建部署包的打包位.我的机器成功选择了pubxml文件并成功部署.

最后,我相信我已将问题追溯到文件Microsoft.Web.Publishing.targets.在我的开发机器上我只有

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web
Run Code Online (Sandbox Code Playgroud)

但服务器还有

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web
Run Code Online (Sandbox Code Playgroud)

看起来这个文件(不知道.pubxml的东西)就是那里使用的东西.

有没有人知道我需要翻动什么(最好在我自己的msbuild文件中,所以我不搞砸4.0版本的构建服务器上的任何其他东西)让msbuild拿起v11.0版本的文件和从而使用我的.pubxml文件?

Say*_*imi 12

有趣的是应该拿起最新的(v11.0),好像这里有一个bug.这由MSBuild属性VisualStudioVersion控制.

以下是在构建时如何填充此值的规则.1.如果将VisualStudioVersion定义为环境变量或获胜的全局属性(例如,命令行上的/ p:).这就是Dev11和Dev11命令提示符总是如何v11 - 它们都将VSV定义为环境变量1.否则,如果有一个子工具集与等效的解决方案版本(当前总是文件格式版本为1)相匹配,选择1.否则,获取默认版本; 10.0如果安装了Dev10,则安装最高版本的子工具集版本(当前总是11)

在您遇到问题时,您可以传入属性/p:VisualStudioVersion=11.0以确保使用正确的目标.