Partager via


déploiement web ASP.NET à l’aide de Visual Studio : déploiement de fichiers supplémentaires

par Tom Dykstra

Télécharger le projet de démarrage

Cette série de tutoriels vous montre comment déployer (publier) une application web ASP.NET sur Azure App Service Web Apps ou sur un fournisseur d’hébergement tiers, à l’aide de Visual Studio 2012 ou Visual Studio 2010. Pour plus d’informations sur la série, consultez le premier tutoriel de la série.

Vue d’ensemble

Ce tutoriel montre comment étendre le pipeline de publication web Visual Studio pour effectuer une tâche supplémentaire pendant le déploiement. La tâche consiste à copier des fichiers supplémentaires qui ne se trouvent pas dans le dossier du projet vers le site web de destination.

Pour ce tutoriel, vous allez copier un fichier supplémentaire : robots.txt. Vous souhaitez déployer ce fichier en préproduction, mais pas en production. Dans le didacticiel Déploiement en production , vous avez ajouté ce fichier au projet et configuré le profil de publication de production pour l’exclure. Dans ce tutoriel, vous verrez une autre méthode pour gérer cette situation, qui sera utile pour tous les fichiers que vous souhaitez déployer, mais que vous ne souhaitez pas inclure dans le projet.

Déplacer le fichier robots.txt

Pour vous préparer à une autre méthode de gestion des robots.txt, dans cette section du tutoriel, vous déplacez le fichier vers un dossier qui n’est pas inclus dans le projet et supprimez robots.txt de l’environnement intermédiaire. Il est nécessaire de supprimer le fichier de la préproduction afin de pouvoir vérifier que votre nouvelle méthode de déploiement du fichier dans cet environnement fonctionne correctement.

  1. Dans Explorateur de solutions, cliquez avec le bouton droit sur le fichier robots.txt, puis cliquez sur Exclure du projet.

  2. À l’aide de Windows Explorateur de fichiers, créez un dossier dans le dossier de solution et nommez-le ExtraFiles.

  3. Déplacez le fichier robots.txt du dossier de projet ContosoUniversity vers le dossier ExtraFiles .

    Dossier ExtraFiles

  4. À l’aide de votre outil FTP, supprimez le fichier robots.txt du site web de préproduction.

    Vous pouvez également sélectionner Supprimer des fichiers supplémentaires à la destination sous Options de publication de fichier sous l’onglet Paramètres du profil de publication intermédiaire, puis republier en préproduction.

Mettre à jour le fichier de profil de publication

Vous n’avez besoin que d'robots.txt en préproduction. Par conséquent, le seul profil de publication que vous devez mettre à jour pour le déployer est Préproduction.

  1. Dans Visual Studio, ouvrez Staging.pubxml.

  2. À la fin du fichier, avant la balise de fermeture </Project> , ajoutez le balisage suivant :

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

    Ce code crée une cible qui collecte des fichiers supplémentaires à déployer. Une cible est composée d’une ou plusieurs tâches que MSBuild exécutera en fonction des conditions que vous spécifiez.

    L’attribut Include spécifie que le dossier dans lequel rechercher les fichiers est ExtraFiles, situé au même niveau que le dossier du projet. MSBuild collecte tous les fichiers de ce dossier et de manière récursive à partir de tous les sous-dossiers (le double astérisque spécifie les sous-dossiers récursifs). Avec ce code, vous pouvez placer plusieurs fichiers et fichiers dans des sous-dossiers dans le dossier ExtraFiles , et tous seront déployés.

    L’élément DestinationRelativePath spécifie que les dossiers et les fichiers doivent être copiés dans le dossier racine du site web de destination, dans la même structure de fichiers et de dossiers que dans le dossier ExtraFiles . Si vous souhaitez copier le dossier ExtraFiles lui-même, la DestinationRelativePath valeur est ExtraFiles\%(RecursiveDir)%(Filename)%(Extension).

  3. À la fin du fichier, avant la balise de fermeture </Project> , ajoutez le balisage suivant qui spécifie quand exécuter la nouvelle cible.

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

    Ce code entraîne l’exécution de la nouvelle CustomCollectFiles cible chaque fois que la cible qui copie des fichiers dans le dossier de destination est exécutée. Il existe une cible distincte pour la publication et la création de package de déploiement, et la nouvelle cible est injectée dans les deux cibles au cas où vous décidez de déployer à l’aide d’un package de déploiement au lieu de la publication.

    Le fichier .pubxml ressemble maintenant à l’exemple suivant :

    <?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. Enregistrez et fermez le fichier Staging.pubxml .

Publier en préproduction

À l’aide de publier en un clic ou de la ligne de commande, publiez l’application à l’aide du profil intermédiaire.

Si vous utilisez la publication en un clic, vous pouvez vérifier dans la fenêtre Aperçu que robots.txt sera copié. Sinon, utilisez votre outil FTP pour vérifier que le fichier robots.txt se trouve dans le dossier racine du site web après le déploiement.

Résumé

Ceci complète cette série de tutoriels sur le déploiement d’une application web ASP.NET sur un fournisseur d’hébergement tiers. Pour plus d’informations sur l’une des rubriques traitées dans ces didacticiels, consultez la carte de contenu de déploiement ASP.NET.

Plus d’informations

Si vous savez comment utiliser des fichiers MSBuild, vous pouvez automatiser de nombreuses autres tâches de déploiement en écrivant du code dans des fichiers .pubxml (pour les tâches spécifiques au profil) ou dans le fichier .wpp.targets du projet (pour les tâches qui s’appliquent à tous les profils). Pour plus d’informations sur les fichiers .pubxml et .wpp.targets , consultez Guide pratique pour modifier les paramètres de déploiement dans les fichiers de profil de publication (.pubxml) et le fichier .wpp.targets dans les projets web Visual Studio. Pour une présentation de base du code MSBuild, consultez The Anatomy of a Project File in Enterprise Deployment Series : Understanding the Project File. Pour savoir comment utiliser des fichiers MSBuild pour effectuer des tâches pour vos propres scénarios, consultez ce livre : Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build de Sayed Ibraham Hashimi et William Bartholomew.

Remerciements

Je tiens à remercier les personnes suivantes qui ont apporté des contributions significatives au contenu de cette série de tutoriels :