Compartilhar via


ASP.NET Implantação da Web usando o Visual Studio: Implantando arquivos extras

por Tom Dykstra

Baixar o Projeto Inicial

Esta série de tutoriais mostra como implantar (publicar) um aplicativo Web ASP.NET para Serviço de Aplicativo do Azure Aplicativos Web ou para um provedor de hospedagem de terceiros usando o Visual Studio 2012 ou o Visual Studio 2010. Para obter informações sobre a série, consulte o primeiro tutorial da série.

Visão geral

Este tutorial mostra como estender o pipeline de publicação na Web do Visual Studio para realizar uma tarefa adicional durante a implantação. A tarefa é copiar arquivos extras que não estão na pasta do projeto para o site de destino.

Para este tutorial, você copiará um arquivo extra: robots.txt. Você deseja implantar esse arquivo no preparo, mas não na produção. No tutorial Implantando em Produção , você adicionou esse arquivo ao projeto e configurou o perfil de publicação produção para excluí-lo. Neste tutorial, você verá um método alternativo para lidar com essa situação, que será útil para todos os arquivos que você deseja implantar, mas não deseja incluir no projeto.

Mover o arquivo robots.txt

Para se preparar para um método diferente de tratamento robots.txt, nesta seção do tutorial, você move o arquivo para uma pasta que não está incluída no projeto e exclui robots.txt do ambiente de preparo. É necessário excluir o arquivo do preparo para que você possa verificar se o novo método de implantação do arquivo nesse ambiente está funcionando corretamente.

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse no arquivo robots.txt e clique em Excluir do Projeto.

  2. Usando o Windows Explorador de Arquivos, crie uma nova pasta na pasta da solução e nomeie-a como ExtraFiles.

  3. Mova o arquivo robots.txt da pasta de projeto ContosoUniversity para a pasta ExtraFiles .

    Pasta ExtraFiles

  4. Usando sua ferramenta FTP, exclua o arquivo robots.txt do site de preparo.

    Como alternativa, você pode selecionar Remover arquivos adicionais no destino emOpções de Publicação de Arquivo na guia Configurações do perfil de publicação de preparo e republicar no preparo.

Atualizar o arquivo de perfil de publicação

Você só precisa robots.txt no preparo, portanto, o único perfil de publicação que você precisa atualizar para implantá-lo é Preparo.

  1. No Visual Studio, abra Staging.pubxml.

  2. No final do arquivo, antes da marca de fechamento </Project> , adicione a seguinte marcação:

    <Target Name="CustomCollectFiles">
        <ItemGroup>
          <_CustomFiles Include="..\ExtraFiles\**\*" />
          <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
          </FilesForPackagingFromProject>
        </ItemGroup>
      </Target>
    

    Esse código cria um novo destino que coletará arquivos adicionais a serem implantados. Um destino é composto por uma ou mais tarefas que o MSBuild executará com base nas condições especificadas.

    O Include atributo especifica que a pasta na qual localizar os arquivos é ExtraFiles, localizada no mesmo nível da pasta do projeto. O MSBuild coletará todos os arquivos dessa pasta e recursivamente de qualquer subpasta (o asterisco duplo especifica subpastas recursivas). Com esse código, você pode colocar vários arquivos e arquivos em subpastas dentro da pasta ExtraFiles e todos serão implantados.

    O DestinationRelativePath elemento especifica que as pastas e os arquivos devem ser copiados para a pasta raiz do site de destino, na mesma estrutura de arquivo e pasta que são encontradas na pasta ExtraFiles . Se você quisesse copiar a própria pasta ExtraFiles , o DestinationRelativePath valor seria ExtraFiles\%(RecursiveDir)%(Filename)%(Extension).

  3. No final do arquivo, antes da marca de fechamento </Project> , adicione a marcação a seguir que especifica quando executar o novo destino.

    <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
    
        <CopyAllFilesToSingleFolderForMsdeployDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
        </CopyAllFilesToSingleFolderForMsdeployDependsOn>
    </PropertyGroup>
    

    Esse código faz com que o novo CustomCollectFiles destino seja executado sempre que o destino que copia arquivos para a pasta de destino for executado. Há um destino separado para publicação versus criação de pacote de implantação e o novo destino é injetado em ambos os destinos, caso você decida implantar usando um pacote de implantação em vez de publicar.

    O arquivo .pubxml agora se parece com o seguinte exemplo:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    This file is used by the publish/package process of your Web project. You can customize the behavior of this process
    by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121. 
    -->
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <WebPublishMethod>MSDeploy</WebPublishMethod>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish>http://contosou-staging.azurewebsites.net</SiteUrlToLaunchAfterPublish>
        <ExcludeApp_Data>True</ExcludeApp_Data>
        <MSDeployServiceURL>waws-prod-bay-001.publish.azurewebsites.windows.net:443</MSDeployServiceURL>
        <DeployIisAppPath>contosou-staging</DeployIisAppPath>
        <RemoteSitePhysicalPath />
        <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>
        <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
        <UserName>$contosou-staging</UserName>
        <_SavePWD>True</_SavePWD>
        <PublishDatabaseSettings>
          <Objects xmlns="">
            <ObjectGroup Name="SchoolContext" Order="1" Enabled="True">
              <Destination Path="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User ID=CU-staging-admin@sk0264hvc9;Password=" Name="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=" />
              <Object Type="DbCodeFirst">
                <Source Path="DBMigration" DbContext="ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL" MigrationConfiguration="ContosoUniversity.DAL.Migrations.Configuration, ContosoUniversity.DAL" Origin="Configuration" />
              </Object>
            </ObjectGroup>
            <ObjectGroup Name="DefaultConnection" Order="2" Enabled="False">
              <Destination Path="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User ID=CU-staging-admin@sk0264hvc9;Password=" Name="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=" />
              <Object Type="DbDacFx">
                <PreSource Path="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-ContosoUniversity.mdf;Initial Catalog=aspnet-ContosoUniversity;Integrated Security=True" includeData="False" />
                <Source Path="$(IntermediateOutputPath)AutoScripts\DefaultConnection_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" />
              </Object>
              <UpdateFrom Type="Web.Config">
                <Source MatchValue="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;Initial Catalog=aspnet-ContosoUniversity;AttachDBFilename=|DataDirectory|\aspnet-ContosoUniversity.mdf" MatchAttributes="$(UpdateFromConnectionStringAttributes)" />
              </UpdateFrom>
              <Object Type="DbFullSql" Enabled="False">
                <Source Path="..\aspnet-data-prod.sql" Transacted="False" />
              </Object>
            </ObjectGroup>
          </Objects>
        </PublishDatabaseSettings>
        <EnableMSDeployBackup>False</EnableMSDeployBackup>
      </PropertyGroup>
      <ItemGroup>
        <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String">
          <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue>
        </MSDeployParameterValue>
        <MSDeployParameterValue Include="$(DeployParameterPrefix)SchoolContext-Web.config Connection String">
          <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue>
        </MSDeployParameterValue>
      </ItemGroup>
      <Target Name="CustomCollectFiles">
        <ItemGroup>
          <_CustomFiles Include="..\ExtraFiles\**\*" />
          <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
          </FilesForPackagingFromProject>
        </ItemGroup>
      </Target>
      <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
    
        <CopyAllFilesToSingleFolderForMsdeployDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
        </CopyAllFilesToSingleFolderForMsdeployDependsOn>
      </PropertyGroup>
    </Project>
    
  4. Salve e feche o arquivo Staging.pubxml .

Publicar no preparo

Usando a publicação com um clique ou a linha de comando, publique o aplicativo usando o perfil preparo.

Se você usar uma publicação com um clique, poderá verificar na janela Visualização que robots.txt será copiado. Caso contrário, use sua ferramenta FTP para verificar se o arquivo robots.txt está na pasta raiz do site após a implantação.

Resumo

Isso conclui esta série de tutoriais sobre como implantar um aplicativo Web ASP.NET em um provedor de hospedagem de terceiros. Para obter mais informações sobre qualquer um dos tópicos abordados nestes tutoriais, consulte o ASP.NET Mapa de Conteúdo de Implantação.

Mais informações

Se você souber como trabalhar com arquivos MSBuild, poderá automatizar muitas outras tarefas de implantação escrevendo código em arquivos .pubxml (para tarefas específicas de perfil) ou no arquivo .wpp.targets do projeto (para tarefas que se aplicam a todos os perfis). Para obter mais informações sobre arquivos .pubxml e .wpp.targets , consulte How to: Edit Deployment Settings in Publish Profile (.pubxml) Files and the .wpp.targets File in Visual Studio Web Projects. Para obter uma introdução básica ao código MSBuild, consulte The Anatomy of a Project File in Enterprise Deployment Series: Understanding the Project File. Para saber como trabalhar com arquivos MSBuild para executar tarefas para seus próprios cenários, confira este livro: Dentro do Microsoft Build Engine: Usando o MSBuild e o Team Foundation Build da Sayed Ibraham Hashimi e William Bartholomew.

Confirmações

Gostaria de agradecer às seguintes pessoas que fizeram contribuições significativas ao conteúdo desta série de tutoriais: