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

时间:2012-06-07 17:31:02

标签: 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 }

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

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

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web

但服务器还有

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web

似乎这个文件(不知道.pubxml的东西)是在那里使用的。

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

1 个答案:

答案 0 :(得分:12)

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

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

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