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

标签 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 文件?

最佳答案

这很有趣,它应该选择最新的(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/

相关文章:

c++ - VS2017 : How can I write per-file options in . vcxproj,没有破坏我设置的过滤器?

msdeploy - 如何在与 MSDeploy 一起使用的Parameters.xml 中指定 IIS Web 应用程序名称

asp.net - 一键式网络发布时是否可以保留文件夹权限?

visual-studio-2012 - Visual Studio ODP 非托管驱动程序 - 无法找到默认的 tnsnames.ora 文件 (12c)

c# - 使用 iTextSharp 读取/修改 PDF 元数据,而无需在 pdf 属性上向用户显示任何数据

visual-studio-2012 - Visual Studio 2012 中缺少数据比较功能?

c# - 网站 : MSB3270: There was a mismatch between the processor architecture

msbuild - 在自定义目标中计算的编译器附加选项

windows-phone-8 - 如何在 Windows 8.1 Phone 的子目录中包含 "content"文件?

msbuild - MSBuild 可以使用集成身份验证还是仅使用基本身份验证进行部署?