Partilhar via


Solução de problemas do processo de empacotamento

por Jason Lee

Este tópico descreve como você pode coletar informações detalhadas sobre o processo de empacotamento usando a propriedade EnablePackageProcessLoggingAndAssert no Microsoft Build Engine (MSBuild).

Quando você definir a propriedade EnablePackageProcessLoggingAndAssert como true, o MSBuild:

  • Adicione informações adicionais sobre o processo de empacotamento aos logs de build.
  • Erros de log em determinadas condições, por exemplo, se arquivos duplicados forem encontrados na lista de empacotamento.
  • Crie um diretório log na pasta ProjectName_Package e use-o para registrar informações sobre os arquivos que você está empacotando.

Se o processo de empacotamento estiver falhando ou os pacotes de implantação da Web não contiverem os arquivos esperados, você poderá usar essas informações para solucionar o processo e identificar onde as coisas estão indo mal.

Observação

A propriedade EnablePackageProcessLoggingAndAssert só funcionará se você compilar seu projeto usando a configuração de Depuração . A propriedade é ignorada em outras configurações.

Este tópico faz parte de uma série de tutoriais baseados nos requisitos de implantação corporativa de uma empresa fictícia chamada Fabrikam, Inc. Esta série de tutoriais usa uma solução de exemplo, a solução do Contact Manager, para representar um aplicativo Web com um nível realista de complexidade, incluindo um aplicativo ASP.NET MVC 3, um serviço WCF (Windows Communication Foundation) e um projeto de banco de dados.

O método de implantação no centro desses tutoriais baseia-se na abordagem de arquivo de projeto dividido descrita em Noções básicas sobre o Arquivo de Projeto, na qual o processo de build é controlado por dois arquivos de projeto, um contendo instruções de build que se aplicam a cada ambiente de destino e outro que contém configurações de build e implantação específicas do ambiente. No momento do build, o arquivo de projeto específico do ambiente é mesclado no arquivo de projeto independente do ambiente para formar um conjunto completo de instruções de build.

Noções básicas sobre a propriedade EnablePackageProcessLoggingAndAssert

Projetos de criação e empacotamento de aplicativos Web descreveram como o WPP (Pipeline de Publicação na Web) fornece um conjunto de destinos do MSBuild que estendem a funcionalidade do MSBuild e permitem que ele se integre à Ferramenta de Implantação Da Web (Implantação da Web) dos Serviços de Informações da Internet (IIS). Ao empacotar um projeto de aplicativo Web, você está invocando destinos do WPP.

Muitos desses destinos do WPP incluem lógica condicional que registra informações adicionais quando a propriedade EnablePackageProcessLoggingAndAssert é definida como true. Por exemplo, se você examinar o destino pacote , poderá ver que ele cria um diretório de log adicional e grava uma lista de arquivos em um arquivo de texto se EnablePackageProcessLoggingAndAssert for igual a true.

<Target Name="Package"
        Condition="$(_CreatePackage)"
        DependsOnTargets="$(PackageDependsOn)">

    <!--Log the information  Set $(EnablePackageProcessLoggingAndAssert) to True        
                 if you want to see this information-->
    <MakeDir Condition="$(EnablePackageProcessLoggingAndAssert) And 
                        !Exists('$(PackageLogDir)')"
             Directories="$(PackageLogDir)" />
    <WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)"
                      Encoding="utf-8"
                      File="$(PackageLogDir)\Prepackage.txt"
                      Lines="@(FilesForPackagingFromProject->'
                             From:%(Identity) 
                             DestinationRelativePath:%(DestinationRelativePath) 
                             Exclude:%(Exclude) 
                             FromTarget:%(FromTarget) 
                             Category:%(Category)
                             ProjectFileType:%(ProjectFileType)')" 
                      Overwrite="True" />

Observação

Os destinos do WPP são definidos no arquivo Microsoft.Web.Publishing.targets na pasta %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web. Você pode abrir esse arquivo e examinar os destinos no Visual Studio 2010 ou em qualquer editor XML. Tome cuidado para não modificar o conteúdo do arquivo.

Habilitando o registro em log adicional

Você pode fornecer um valor para a propriedade EnablePackageProcessLoggingAndAssert de várias maneiras, dependendo de como você cria seu projeto.

Se você compilar seu projeto a partir da linha de comando, poderá fornecer um valor para a propriedade EnablePackageProcessLoggingAndAssert como um argumento de linha de comando:

MSBuild.exe /t:Build
            /p:Configuration=DEBUG
            /p:DeployOnBuild=true
            /p:DeployTarget=Package
            /p:EnablePackageProcessLoggingAndAssert=true
            [Your project].csproj

Se você estiver usando um arquivo de projeto personalizado para criar seus projetos, poderá incluir o valor EnablePackageProcessLoggingAndAssert no atributo Propriedades da tarefa MSBuild :

<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
   <MSBuild Projects="@(ProjectsToBuild)"
            Properties="OutDir=$(OutputRoot);
                        Configuration=$(Configuration);
                        DeployOnBuild=true;
                        DeployTarget=Package;
                        EnablePackageProcessLoggingAndAssert=true"
            Targets="Build" />
  </Target>

Se você estiver usando uma definição de build do TFS (Team Foundation Server) para criar seus projetos, poderá fornecer um valor para a propriedade EnablePackageProcessLoggingAndAssert na linha Argumentos do MSBuild : se você estiver usando uma definição de build do Team Foundation Server (T F S) para compilar seus projetos, poderá fornecer um valor para a propriedade EnablePackageProcessLoggingAndAssert nos Argumentos do MSBuild.

Observação

Para obter mais informações sobre como criar e configurar definições de build, consulte Criando uma definição de build que dá suporte à implantação.

Como alternativa, se você quiser incluir o pacote em cada build, poderá modificar o arquivo de projeto do projeto do aplicativo Web para definir a propriedade EnablePackageProcessLoggingAndAssertcomo true. Você deve adicionar a propriedade ao primeiro elemento PropertyGroup em seu arquivo .csproj ou .vbproj.

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="...">
  <PropertyGroup>
    <EnablePackageProcessLoggingAndAssert 
       Condition=" '$(EnablePackageProcessLoggingAndAssert)' == '' ">
         true
    </EnablePackageProcessLoggingAndAssert>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

Examinando os arquivos de log

Quando você cria e empacota um projeto de aplicativo Web com EnablePackageProcessLoggingAndAssert definido como true, o MSBuild cria uma pasta adicional chamada Log na pasta ProjectName_Package. A pasta Log contém vários arquivos:

O MSBuild cria uma pasta adicional chamada Log na pasta ProjectName_Package.

A lista de arquivos que você vê variará de acordo com as coisas em seu projeto e seu processo de build. No entanto, esses arquivos normalmente são usados para registrar a lista de arquivos que o WPP está coletando para empacotamento, em vários estágios do processo:

  • O arquivo PreExcludePipelineCollectFilesPhaseFileList.txt lista os arquivos que o MSBuild coleta para empacotamento antes que todos os arquivos especificados para exclusão sejam removidos.

  • O arquivo AfterExcludeFilesFilesList.txt contém a lista de arquivos modificados depois que todos os arquivos especificados para exclusão são removidos.

    Observação

    Para obter mais informações sobre como excluir arquivos e pastas do processo de empacotamento, consulte Excluindo arquivos e pastas da implantação.

  • O arquivo AfterTransformWebConfig.txt lista os arquivos coletados para empacotamento após a execução de quaisquer transformações Web.config . Nesta lista, todos os arquivos de transformação Web.config específicos da configuração, como Web.Debug.config e Web.Release.config, são excluídos da lista de arquivos para empacotamento. Uma única Web.config transformada é incluída em seu lugar.

  • O arquivo PostAutoParameterizationWebConfigConnectionStrings.txt contém a lista de arquivos depois que as cadeias de conexão no arquivo Web.config tiverem sido parametrizadas. Esse é o processo que permite substituir as cadeias de conexão pelas configurações certas para o ambiente de destino ao implantar o pacote.

  • O arquivo Prepackage.txt contém a lista finalizada de arquivos pré-build a serem incluídos no pacote.

Observação

Os nomes dos arquivos de log adicionais normalmente correspondem aos destinos do WPP. Você pode examinar esses destinos examinando o arquivo Microsoft.Web.Publishing.targets na pasta %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web.

Se o conteúdo do pacote da Web não for o esperado, revisar esses arquivos pode ser uma maneira útil de identificar em que ponto no processo as coisas deram errado.

Conclusão

Este tópico descreveu como você pode usar a propriedade EnablePackageProcessLoggingAndAssert no MSBuild para solucionar o processo de empacotamento. Ele explicou as diferentes maneiras pelas quais você pode fornecer o valor da propriedade para o processo de build e descreveu as informações adicionais que são registradas quando você define a propriedade como true.

Leitura Adicional

Para obter mais informações sobre como usar arquivos de projeto personalizados do MSBuild para controlar o processo de implantação, consulte Noções básicas sobre o arquivo de projeto e Noções básicas sobre o processo de build. Para obter mais informações sobre o WPP e como ele gerencia o processo de empacotamento, consulte Criando e empacotando projetos de aplicativo Web. Para obter diretrizes sobre como excluir arquivos e pastas específicos de pacotes de implantação da Web, consulte Excluindo arquivos e pastas da implantação.