Exclusão de arquivos e pastas da implantação

por Jason Lee

Este tópico descreve como você pode excluir arquivos e pastas de um pacote de implantação da Web ao criar e empacotar um projeto de aplicativo Web.

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.

Visão geral

Quando você cria um projeto de aplicativo Web no Visual Studio 2010, o WPP (Web Publishing Pipeline) permite estender esse processo de build empacotando seu aplicativo Web compilado em um pacote Web implantável. Em seguida, você pode usar a Ferramenta de Implantação da Web (Implantação da Web) dos Serviços de Informações da Internet (IIS) para implantar esse pacote web em um servidor Web do IIS remoto ou importar o pacote web manualmente por meio do Gerenciador do IIS. Esse processo de empacotamento é explicado em Projetos de Criação e Empacotamento de Aplicativos Web.

Então, como você controla o que é incluído no pacote da Web? As configurações do projeto no Visual Studio, por meio do arquivo de projeto subjacente, fornecem controle suficiente para muitos cenários. No entanto, em alguns casos, talvez você queira adaptar o conteúdo do pacote web para ambientes de destino específicos. Por exemplo, talvez você queira incluir uma pasta para arquivos de log ao implantar seu aplicativo em um ambiente de teste, mas excluir a pasta ao implantar o aplicativo em um ambiente de preparo ou produção. Este tópico mostrará como fazer isso.

O que é incluído por padrão?

Quando você configura as propriedades do projeto de aplicativo Web no Visual Studio, a lista Itens a serem implantados na página Pacote/Publicar na Web permite especificar o que você deseja incluir no pacote de implantação da Web. Por padrão, isso é definido como Somente arquivos necessários para executar este aplicativo.

Por padrão, isso é definido como Somente arquivos necessários para executar este aplicativo.

Quando você escolher Somente arquivos necessários para executar esse aplicativo, o WPP tentará determinar quais arquivos devem ser adicionados ao pacote da Web. Isso inclui:

  • Todas as saídas de build para o projeto.
  • Todos os arquivos marcados com uma ação de build de Conteúdo.

Observação

A lógica que determina quais arquivos incluir está contida neste arquivo:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

Excluindo arquivos e pastas específicos

Em alguns casos, você desejará um controle mais refinado sobre quais arquivos e pastas são implantados. Se você souber quais arquivos deseja excluir antecipadamente e a exclusão se aplicar a todos os ambientes de destino, basta definir a Ação de Build de cada arquivo como Nenhum.

Para excluir arquivos específicos da implantação

  1. Na janela Gerenciador de Soluções, clique com o botão direito do mouse no arquivo e clique em Propriedades.
  2. Na janela Propriedades , na linha Ação de Build , selecione Nenhum.

No entanto, essa abordagem nem sempre é conveniente. Por exemplo, talvez você queira variar quais arquivos e pastas estão incluídos de acordo com seu ambiente de destino e de fora do Visual Studio. Por exemplo, na solução de exemplo do Contact Manager, dê uma olhada no conteúdo do projeto ContactManager.Mvc:

O conteúdo do projeto ContactManager.Mvc.

  • A pasta Interno contém alguns scripts SQL que o desenvolvedor usa para criar, descartar e preencher bancos de dados locais para fins de desenvolvimento. Nada nesta pasta deve ser implantado em um ambiente de preparo ou produção.
  • A pasta Scripts contém vários arquivos JavaScript. Muitos desses arquivos são incluídos puramente para dar suporte à depuração ou fornecer o IntelliSense no Visual Studio. Alguns desses arquivos não devem ser implantados em ambientes de preparo ou produção. No entanto, talvez você queira implantá-los em um ambiente de teste do desenvolvedor para facilitar a solução de problemas.

Embora você possa manipular seus arquivos de projeto para excluir arquivos e pastas específicos, há uma maneira mais fácil. O WPP inclui um mecanismo para excluir arquivos e pastas criando listas de itens chamadas ExcludeFromPackageFolders e ExcludeFromPackageFiles. Você pode estender esse mecanismo adicionando seus próprios itens a essas listas. Para fazer isso, você precisa concluir estas etapas de alto nível:

  1. Crie um arquivo de projeto personalizado chamado [nome do projeto].wpp.targets na mesma pasta que o arquivo de projeto.

    Observação

    O arquivo .wpp.targets precisa ir na mesma pasta que o arquivo de projeto do aplicativo Web, por exemplo, ContactManager.Mvc.csproj, em vez de na mesma pasta que todos os arquivos de projeto personalizados que você usa para controlar o processo de build e implantação.

  2. No arquivo .wpp.targets , adicione um elemento ItemGroup .

  3. No elemento ItemGroup , adicione os itens ExcludeFromPackageFolders e ExcludeFromPackageFiles para excluir arquivos e pastas específicos conforme necessário.

Essa é a estrutura básica deste arquivo .wpp.targets :

<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>   
    <ExcludeFromPackageFolders Include="[semi-colon-separated folder list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFolders>
    <ExcludeFromPackageFiles Include="[semi-colon-separated file list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>
</Project>

Observe que cada item inclui um elemento de metadados de item chamado FromTarget. Esse é um valor opcional que não afeta o processo de build; ele simplesmente serve para indicar por que arquivos ou pastas específicos foram omitidos se alguém revisar os logs de build.

Excluindo arquivos e pastas de um pacote web

O próximo procedimento mostra como adicionar um arquivo .wpp.targets a um projeto de aplicativo Web e como usar o arquivo para excluir arquivos e pastas específicos do pacote web ao criar seu projeto.

Para excluir arquivos e pastas de um pacote de implantação da Web

  1. Abra sua solução no Visual Studio 2010.

  2. Na janela Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto do aplicativo Web (por exemplo, ContactManager.Mvc), aponte para Adicionar e clique em Novo Item.

  3. Na caixa de diálogo Adicionar Novo Item , selecione o modelo Arquivo XML .

  4. Na caixa Nome , digite [nome do projeto].wpp.targets (por exemplo, ContactManager.Mvc.wpp.targets) e clique em Adicionar.

    Na caixa Nome, digite nome do projeto.wpp.targets e clique em Adicionar.

    Observação

    Se você adicionar um novo item ao nó raiz de um projeto, o arquivo será criado na mesma pasta que o arquivo de projeto. Você pode verificar isso abrindo a pasta no Windows Explorer.

  5. No arquivo, adicione um elemento Project e um elemento ItemGroup :

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>    
      </ItemGroup>
    </Project>
    
  6. Se você quiser excluir pastas do pacote web, adicione um elemento ExcludeFromPackageFolders ao elemento ItemGroup :

    1. No atributo Incluir , forneça uma lista separada por ponto e vírgula das pastas que você deseja excluir.

    2. No elemento de metadados FromTarget , forneça um valor significativo para indicar por que as pastas estão sendo excluídas, como o nome do arquivo .wpp.targets .

      <ExcludeFromPackageFolders Include="Internal">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFolders>
      
  7. Se você quiser excluir arquivos do pacote da Web, adicione um elemento ExcludeFromPackageFiles ao elemento ItemGroup :

    1. No atributo Include , forneça uma lista separada por ponto e vírgula dos arquivos que você deseja excluir.

    2. No elemento de metadados FromTarget , forneça um valor significativo para indicar por que os arquivos estão sendo excluídos, como o nome do arquivo .wpp.targets .

      <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFiles>
      
  8. O arquivo [nome do projeto].wpp.targets agora deve ser semelhante a este:

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>   
        <ExcludeFromPackageFolders Include="Internal">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFolders>
        <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-
    vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFiles>
      </ItemGroup>
    </Project>
    
  9. Salve e feche o arquivo [nome do projeto].wpp.targets .

Na próxima vez que você compilar e empacotar seu projeto de aplicativo Web, o WPP detectará automaticamente o arquivo .wpp.targets . Todos os arquivos e pastas especificados não serão incluídos no pacote da Web.

Conclusão

Este tópico descreveu como excluir arquivos e pastas específicos ao criar um pacote web, criando um arquivo .wpp.targets personalizado na mesma pasta que o arquivo de projeto do aplicativo Web.

Leitura Adicional

Para obter mais informações sobre como usar arquivos de projeto de Microsoft Build Engine personalizados (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 processo de empacotamento e implantação, consulte Criando e empacotando projetos de aplicativo Web, Configurando parâmetros para implantação de pacote Web e Implantando pacotes Web.