如何从TeamCity预编译ASP.NET Web应用程序?

And*_*ras 5 asp.net deployment teamcity continuous-integration compilation

我有一个关于从TeamCity预编译ASP.NET Web应用程序项目的问题.这是以下线程的后续问题:

使用TeamCity进行构建后如何部署?

我已经完成了使用上述线程实现从单元测试到自动部署的CI,现在我想通过预编译项目来补充这个过程.该项目相当大,我希望在新部署后避免任何不必要的响应时间延迟.

那么,有没有办法从TeamCity做到这一点?就像用一些特定的参数调用MSBuild一样?

Mic*_*edy 3

当然,可以使用自定义 MSBuild 脚本来完成。这是我们运行的用于预编译 ASP.NET MVC 3 网站的程序(并不是说它确实因 ASP.NET 版本而异)。

首先,它通过针对解决方案文件运行 MSBuild 来运行常规构建,然后运行以下自定义 MSBuild 代码:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

  <PropertyGroup>
    <WebProject>Web\ChatPast.Web\ChatPast.Web.csproj</WebProject>
    <WebProjectFolder>Web\ChatPast.Web</WebProjectFolder>
    <WebPublishFolder>ChatPastWebPublish</WebPublishFolder>
  </PropertyGroup>

  <ItemGroup>
    <ZipFiles Include="$(teamcity_build_workingDir)\src\ChatPast\$(WebPublishFolder)\**\*.*" />
  </ItemGroup>

  <Target Name="Build">
      <!-- Compilation of all projects -->
      <MSBuild Projects="ChatPast.sln" Properties="Configuration=Release"/>

      <!-- Creating web publish folder. -->
      <RemoveDir Directories="$(WebPublishFolder)"/>
      <MakeDir Directories="$(WebPublishFolder)"/>

      <!-- Running ASP.NET publish -->
      <MSBuild Projects="$(WebProject)"
           Targets="ResolveReferences;_CopyWebApplication"
           Properties="Configuration=Release;WebProjectOutputDir=..\..\$(WebPublishFolder);OutDir=..\..\$(WebPublishFolder)\bin\" />

  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)