MSBuild DeployOnBuild = true不发布

我有一个使用Hudson通过命令行构build的Visual Studio 2010 MVC2 Web应用程序。 我想让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目标,这给了我一个跳过不可发布的项目响应,正如我在其他人的post中看到的。

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

任何想法,为什么这不是出版? 我是否错误地使用这些标签? 我确定这里有些东西我只是没有看到。

假设你没有在你的哈德森服务器上安装Visual Studio 2010,那么可能是你缺less发布“目标”文件。 经过大量的台式撞击,我终于解决了这个问题。

有一段时间,我知道我需要复制目录

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

从我的本地机器与VS2010到我的服务器,以获得项目build设 。 但为了让项目也发布我需要也复制目录

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

注意:在我的情况下,我实际上是提交这些文件夹到我的源代码pipe理,并更改我的csproj文件中的<MSBuildExtensionsPath32>值指向这些检出的文件夹(所以有一个更less的步骤时准备服务器)。 这是没有必要得到它的工作,但你可能要考虑这个解决你的问题后。

更新:所以在我做了上述之后,生成抱怨,它找不到“Microsoft.Web.Deployment.dll”。 为了解决这个问题,我需要在服务器上安装Microsoft Web Deploy v2.0 , 即使我只发布到文件系统 。 我想我可以看到这个逻辑。

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

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

1)您可以有不同的发布path

2)运行发布目标的条件是错误的

要validation他们两个用flag / v:diag调用你的命令。 按目标search“发布”,并试图找出真正发生的事情。 它看起来像

 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) 

在VS2012中遇到了这个问题 – 最终在构build服务器上安装了Web开发工具,并对其进行了修复。

除了Brian Hinchey的回答之外,我发现我还需要附加带有附加参数VisualStudioVersion的msbuild批处理调用,以便在构build代理(我的情况下为TeamCity)上的正确版本和path为Microsoft.WebApplication.targets调用。 如果没有这个参数,web部署和发布步骤还没有完成,我的批处理成功完成,返回的代码非常困难 – 即使将/ verbosity标志附加到“debugging”构build也是如此。 这一点是由他的网站上的SAYED IBRAHIM HASHIMI: http ://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

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