在我的开发笔记本电脑上,我只安装了 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 文件?
最佳答案
这很有趣,它应该选择最新的(v11.0),似乎这里有一个错误。这是由 MSBuild 属性 VisualStudioVersion 控制的。
以下是在构建时如何填充该值的规则。 1. 如果 VisualStudioVersion 被定义为环境变量或全局属性(例如/p: 在命令行上),则获胜。这就是 Dev11 和 Dev11 命令提示符始终是 v11 的方式 – 它们都将 VSV 定义为环境变量 1. 否则,如果存在与等效解决方案版本匹配的子工具集(当前始终为文件格式版本 – 1),请选择该子工具集 1. 否则,获取默认版本; 10.0 如果安装了 Dev10,则安装最高版本的子工具集版本(当前始终为 11),否则
在您的情况下,由于遇到问题,您可以传入属性 /p:VisualStudioVersion=11.0
以确保使用正确的目标。
关于msbuild - 如何控制在 .NET4 和 4.5RC 之间使用哪个版本的 msbuild 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936828/