6

在我的开发笔记本电脑上,我只安装了 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 文件?

4

1 回答 1

12

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

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

在您的情况下,由于您遇到问题,您可以传入属性/p:VisualStudioVersion=11.0以确保使用正确的目标。

于 2012-06-08T13:40:26.857 回答