MSBuild DeployOnBuild = true不发布

时间:2011-02-10 21:08:06

标签: asp.net asp.net-mvc-2 msbuild publishing

我有一个Visual Studio 2010 MVC2 Web应用程序,我正在使用Hudson通过命令行构建。我想让Hudson发布一个Web输出,所以我将DeployOnBuild = true和CreatePackageOnPublish = True标记添加到我的命令行。

我的命令是:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
   /target:Clean,Build 
   /property:Configuration=Debug;DeployOnBuild=True;CreatePackageOnPublish=True; 
   [my project name.csproj]

在我的开发计算机(Windows 7)上运行此命令会成功将Web输出发布到\obj\Debug\Package\PackageTmp\。但是在Hudson服务器(WS 2008)上运行它会成功编译,但它不会发布。相同的命令,相同版本的MSBuild,相同的源代码。

我已经尝试了/t:Publish目标,它给了我一个Skipping Unpublishable Project响应,正如我在其他几个人的帖子中看到的那样。

我也尝试将DeployOnBuild=TrueCreatePackageOnPublish=True标记添加到我的项目文件中,并且没有任何更改。

有关为什么不发布的任何想法?我错误地使用这些标签吗?我确信这里有些东西我只是没有看到。

4 个答案:

答案 0 :(得分:40)

假设您在您的哈德森服务器上安装了Visual Studio 2010,那么可能是您缺少发布“目标”文件。经过大量的直接敲打,我终于解决了这个问题。

很长一段时间我都知道我需要复制目录

  

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

从我的VS2010本地计算机到我的服务器,以便将项目设置为构建。但是要让项目也发布,我还需要复制目录

  

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

注意:在我的情况下,我实际上是将这些文件夹提交到我的源代码控制并更改csproj文件中的<MSBuildExtensionsPath32>值以指向这些已检出的文件夹(因此在准备服务器时只需少一步) 。这不是让它工作的必要条件,但您可能需要在解决问题后考虑这一点。

更新:所以在我完成上述操作后,构建抱怨它无法找到“Microsoft.Web.Deployment.dll”。要解决此问题,我需要在服务器上安装Microsoft Web Deploy v2.0,即使我只发布到文件系统。我想我可以看到这里的逻辑。

更新:我发现通过IIS Web平台安装程序安装“Visual Studio 2010 Shell(集成)”将安装所需的构建目标。这似乎是在没有在服务器上安装整个Visual Studio应用程序而不是从开发机器手动将看似任意的文件夹复制到服务器之间的妥协。

答案 1 :(得分:3)

似乎不满足运行发布目标的条件。

1)您可以拥有不同的发布路径

2)运行发布目标的条件为false

要验证它们都使用标记 / v:diag 调用您的命令。搜索目标“发布”并尝试找出真正发生的事情。它看起来像

Target "ExecuteT4Templates: (TargetId:144)" in file "D:\App\App.csproj" from project "D:\App\App.csproj":
Skipping target "ExecuteT4Templates" because all output files are up-to-date with respect to the input files.
Input files: D:\App\App.exe\\App_Config\Configuration.tt;D:\App\App.exe\\App_Config\Debug.App.tt;obj\\Debug.t4lastbuild
Output files: D:\App\App.exe\\App.config
Done building target "ExecuteT4Templates" in project "App.csproj".: (TargetId:144)

答案 2 :(得分:1)

在VS2012中遇到这种情况 - 最终在构建服务器上安装了Web开发人员工具并修复了它。

答案 3 :(得分:1)

除了Brian Hinchey的回答,我发现我还需要使用附加参数VisualStudioVersion附加我的msbuild批处理调用,以便在构建代理(在我的情况下为TeamCity)中将正确的版本和路径添加到Microsoft.WebApplication。目标将被调用。 如果没有这个参数,Web部署和发布步骤就没有完成,我的批处理成功完成,代码0返回,使得分析非常困难 - 即使将/ verbosity标志附加到'debug'构建。 这一点由SAYED IBRAHIM HASHIMI在他的网站上提出: http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

我的情况是我在MVC网络项目中启用了Visual Studio兼容性,以便我可以在VS2010或2012中打开项目(如上面链接中的Sayed所述) - 所以我开发了在VS2012本地,而TeamCity构建代理具有VS 2010 Web构建和部署目标。