【问题标题】:MSBuild DeployOnBuild=true not publishingMSBuild DeployOnBuild=true 不发布
【发布时间】:2011-06-25 03:56:43
【问题描述】:

我有一个使用 Hudson 通过命令行构建的 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 目标,这给了我一个跳过不可发布项目的响应,正如我在其他几个人的帖子中看到的那样。

我也尝试将DeployOnBuild=TrueCreatePackageOnPublish=True 标签添加到我的项目文件中,但没有任何变化。

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

【问题讨论】:

  • 你有没有想过这个问题?我现在正碰壁。
  • 我将 TeamCity 移至新服务器,所有 Web 应用程序工件都是 50 多个项目的 emtpy zip。正常服务和测试应用程序都被很好地处理了。现在已经尝试解决这个问题超过 24 小时 ;(

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在 VS2012 中遇到了这个问题——最终在构建服务器上安装了 Web 开发人员工具并修复了它。

    【讨论】:

    • 您所说的这个网络开发工具到底是什么?
    • 我假设它是 VS 安装菜单中的 Web 开发工具
    【解决方案3】:

    假设您没有在您的 hudson 服务器上安装了 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 应用程序和不手动将看似任意的文件夹从您的开发机器复制到您的服务器之间的一个很好的折衷方案。

    【讨论】:

    • 已经这样做了,我仍然得到相同的结果。 DeployOnBuild 仍然被忽略。
    • 我试用了 Web Deploy 3.0 RC,效果非常棒!谢谢
    • 更新不再正确:安装 VS 2013 Shell (Integrated) 未在 MSBuild 安装下提供所需的“Web”文件夹。
    • 非常感谢。你为我节省了很多时间。我到处都读到需要 WebApplication 文件夹,但没有人提到 Web 文件夹。我在 Jenkins 上的编译总是没有错误地结束,但总是忽略出版物。我的 Visual Studio 解决方案由一个服务、几个项目和一个 WebApp 组成,现在最终只需使用 /p:VisualStudioVersion=12.0 /p:DeployOnBuild=true /p:PublishProfile=ProfileName 就可以完美地在本地文件系统上发布,而无需对 .pubxml 文件进行任何更改。再次感谢您!
    • 此位置是否已针对 msbuild 14.0 更改?尽管安装了 Visual Studio 2017,但我没有在本地看到该 Web 文件夹,但 Web 应用程序在那里。
    【解决方案4】:

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

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

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

    要验证它们两者,请使用标志 /v:diag 调用您的命令。按Target "Publish" 搜索并尝试找出实际发生的情况。它看起来像

    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)
    

    【讨论】:

    • 感谢您的 /v:diag 想法。我想我们越来越近了。即使包部署成功,看起来“发布”目标也没有受到影响。两个输出之间不同之处的第一个迹象是,在工作的机器上,提到了以下设置。这非常接近输出的开头: _CreatePackage = True _DeployOnBuild = True _PackageTempDir = obj\Debug\Package\PackageTmp 在此之前,两个输出之间没有显着差异。关于达到这些设置的条件有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多