【问题标题】:TeamCity MSBuild Web Site publishprojTeamCity MSBuild 网站发布项目
【发布时间】:2014-07-27 14:53:26
【问题描述】:

我有一个网站项目,我正在尝试通过 TeamCity 和 WebDeploy 进行部署。

因为这是一个网站而不是一个 Web 应用程序,所以我没有 .vbproj 或 .csproj 文件。

我从this 在这里的帖子中得出结论,我需要创建一个 .publishproj 文件,因为 MSbuild 将其用作构建文件。

但是,当 TeamCity 调用 MSBuild 时,它会因以下错误而退出:-

Failed to start MSBuild.exe. Failed to detect default target(s) in the project file C:\TeamCity\buildAgent\work\d9dda73c7948f14a\MainSite\website.publishproj. Please define targets explicitly in the build configuration options on TeamCity Web UI. Project does not define DefaultTargets or InitialTargets.

我查看了 .publishproj 文件,没有定义目标。

我还关注了 Troy Hunt 的 You're deploying it wrong 关于 Web 应用程序的文章,效果很好。

谁能建议我如何从 Team City 网络部署网站(不是网络应用程序)?

【问题讨论】:

    标签: web-applications msbuild web teamcity webdeploy


    【解决方案1】:

    我从未与 web-site-not-a-web-project 合作过,所以对它持保留态度。

    website.publishproj 似乎是在您触摸 Visual Studio 中的 Build > Publish Web Site 菜单并导入 Microsoft.WebSite.Publishing.targets 的那一刻创建的,这很好,因为它是您导入的 same 类似目标文件普通的 Web 项目 (Microsoft.WebApplication.targets) 并且两者都导入 Microsoft.Web.Publishing.targets

    与 Visual Studio 创建的任何项目不同,它没有DefaultTargets = BuildOutputPath 属性,因此您需要在MSBuild build step 中显式指定Targets,并在Microsoft.WebSite.Publishing.targetsMicrosoft.Web.Publishing.targets 中定义任何目标.

    您可以调用您的标准msbuild website.publishproj /t:Package /p:OutputPath=.\ 以在obj\Debug\Package 中生成.cmd 和对应的.zip。然后只需调用.cmd 或将.zip 传递给msdeploy.exe -source:package=.zip 或尝试执行/t:Build /p:DeployOnBuild=true,但我怀疑您会丢失大量由普通Web 项目预定义的属性。

    编辑:

    似乎在某处有一个循环引用,你最终会得到一个包含 2/3 副本的包,位于 PackageTmp\_PublishedWebsites,因此请使用 OutDirOutputPathPackageDestinationRoot 等等来获得摆脱重复。创建一个示例 Web 项目并通读 .csproj.targets 以获得想法。

    编辑:

    如果您通过发布向导,您还将获得App_Data\PublishProfiles\Foo.pubxml 以及通过PublishProfileName/WebPublishProfileFile 读取的信息,导入它可以节省一些打字时间。 This 可能是相关的。

    编辑:

    导入正确的网络目标似乎是 2012/2013 年的一项新功能,而 2010 年您将需要使用 aspnet_compiler

    aspnet_compiler -v Foo -p . -f obj
    msdeploy -verb:sync -source:iisApp=%CD%\obj -dest:iisApp="Default Web Site/foo"
    

    【讨论】:

      【解决方案2】:

      最后我发现,出于某种原因,我不得不在 Team City 中为网站项目明确设置目标为 Rebuild

      【讨论】:

        【解决方案3】:

        Visual Studio (sln) 运行器的 Build Step 属性 Targets 设置为 Package

        假设你有以下目录结构:

        \{Team City Working Directory}
          |
          |-- MyWebSite
          |    |-- App_Code
          |    |-- App_Data
          |    |    |
          |    |    \--PublishProfiles
          |    |         |
          |    |         \-- MyWebSite-Package.pubxml
          |    |
          |    | ... Other files and directories
          |    |
          |    |-- MyWebSite.publishproj
          |
          |-- SomeOtherLibraryProject
          |
          \-- MyWebSite.sln
        

        然后,如果您在构建步骤的解决方案文件路径字段中指定解决方案文件,您应该为构建步骤指定以下命令行参数

        /p:PublishProfile=MyWebSite\App_Data\PublishProfiles\MyWebSite-Package.pubxml
        

        但是,您也可以为构建步骤的解决方案文件路径属性指定.\MyWebSite\MyWebSite.publishproj;如果这样做,则应指定以下 命令行参数

        /p:PublishProfile=App_Data\PublishProfiles\MyWebSite-Package.pubxml
        

        PublishProfile 属性是 解决方案文件路径 属性中指定的项目或解决方案文件的相对路径。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多