Résolution des problèmes du processus d’empaquetage
par Jason Lee
Cette rubrique explique comment collecter des informations détaillées sur le processus d’empaquetage à l’aide de la propriété EnablePackageProcessLoggingAndAssert dans le Microsoft Build Engine (MSBuild).
Lorsque vous définissez la propriété EnablePackageProcessLoggingAndAssert sur true, MSBuild :
- Ajoutez des informations supplémentaires sur le processus d’empaquetage aux journaux de build.
- Erreurs de journalisation dans certaines conditions, par exemple, si des fichiers en double sont trouvés dans la liste d’empaquetage.
- Créez un répertoire Journal dans le dossier ProjectName_Package et utilisez-le pour enregistrer des informations sur les fichiers que vous empaquetez.
Si le processus d’empaquetage échoue ou si vos packages de déploiement web ne contiennent pas les fichiers attendus, vous pouvez utiliser ces informations pour dépanner le processus et identifier les problèmes.
Notes
La propriété EnablePackageProcessLoggingAndAssert fonctionne uniquement si vous générez votre projet à l’aide de la configuration Debug . La propriété est ignorée dans d’autres configurations.
Cette rubrique fait partie d’une série de tutoriels basés sur les exigences de déploiement d’entreprise d’une société fictive nommée Fabrikam, Inc. Cette série de tutoriels utilise un exemple de solution, la solution Gestionnaire de contacts, pour représenter une application web avec un niveau de complexité réaliste, notamment une application ASP.NET MVC 3, un service Windows Communication Foundation (WCF) et un projet de base de données.
La méthode de déploiement au cœur de ces didacticiels est basée sur l’approche de fichier projet fractionné décrite dans Présentation du fichier projet, dans laquelle le processus de génération est contrôlé par deux fichiers projet : l’un contenant des instructions de génération qui s’appliquent à chaque environnement de destination et l’autre contenant des paramètres de build et de déploiement spécifiques à l’environnement. Au moment de la génération, le fichier projet spécifique à l’environnement est fusionné dans le fichier projet indépendant de l’environnement pour former un ensemble complet d’instructions de génération.
Présentation de la propriété EnablePackageProcessLoggingAndAssert
Création et empaquetage de projets d’application web décrit comment le pipeline de publication web (WPP) fournit un ensemble de cibles MSBuild qui étendent les fonctionnalités de MSBuild et lui permettent de s’intégrer à l’outil de déploiement web (Web Deploy) des services Internet (IIS). Lorsque vous empaqueter un projet d’application web, vous appelez des cibles WPP.
Un grand nombre de ces cibles WPP incluent une logique conditionnelle qui enregistre des informations supplémentaires lorsque la propriété EnablePackageProcessLoggingAndAssert a la valeur true. Par exemple, si vous passez en revue la cible du package , vous pouvez voir qu’elle crée un répertoire de journal supplémentaire et écrit une liste de fichiers dans un fichier texte si EnablePackageProcessLoggingAndAssert est égal à 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" />
Notes
Les cibles WPP sont définies dans le fichier Microsoft.Web.Publishing.targets du dossier %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web. Vous pouvez ouvrir ce fichier et passer en revue les cibles dans Visual Studio 2010 ou n’importe quel éditeur XML. Veillez à ne pas modifier le contenu du fichier.
Activation de la journalisation supplémentaire
Vous pouvez fournir une valeur pour la propriété EnablePackageProcessLoggingAndAssert de différentes manières, selon la façon dont vous générez votre projet.
Si vous générez votre projet à partir de la ligne de commande, vous pouvez fournir une valeur pour la propriété EnablePackageProcessLoggingAndAssert en tant qu’argument de ligne de commande :
MSBuild.exe /t:Build
/p:Configuration=DEBUG
/p:DeployOnBuild=true
/p:DeployTarget=Package
/p:EnablePackageProcessLoggingAndAssert=true
[Your project].csproj
Si vous utilisez un fichier projet personnalisé pour générer vos projets, vous pouvez inclure la valeur EnablePackageProcessLoggingAndAssert dans l’attribut Properties de la tâche MSBuild :
<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
<MSBuild Projects="@(ProjectsToBuild)"
Properties="OutDir=$(OutputRoot);
Configuration=$(Configuration);
DeployOnBuild=true;
DeployTarget=Package;
EnablePackageProcessLoggingAndAssert=true"
Targets="Build" />
</Target>
Si vous utilisez une définition de build Team Foundation Server (TFS) pour générer vos projets, vous pouvez fournir une valeur pour la propriété EnablePackageProcessLoggingAndAssert dans la ligne Arguments MSBuild :
Notes
Pour plus d’informations sur la création et la configuration des définitions de build, consultez Création d’une définition de build qui prend en charge le déploiement.
Si vous souhaitez inclure le package dans chaque build, vous pouvez également modifier le fichier projet de votre projet d’application web afin de définir la propriété EnablePackageProcessLoggingAndAssert sur true. Vous devez ajouter la propriété au premier élément PropertyGroup dans votre fichier .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>
Examen des fichiers journaux
Lorsque vous générez et empaquetez un projet d’application web avec EnablePackageProcessLoggingAndAssert défini sur true, MSBuild crée un dossier supplémentaire nommé Log dans le dossier ProjectName_Package. Le dossier Journal contient différents fichiers :
La liste des fichiers que vous voyez varie en fonction des éléments de votre projet et de votre processus de génération. Toutefois, ces fichiers sont généralement utilisés pour enregistrer la liste des fichiers que WPP collecte pour l’empaquetage, à différentes étapes du processus :
Le fichierPreExcludePipelineCollectFilesPhaseFileList.txt répertorie les fichiers que MSBuild collecte pour l’empaquetage avant que tous les fichiers spécifiés pour l’exclusion soient supprimés.
Le fichierAfterExcludeFilesFilesList.txt contient la liste des fichiers modifiés après la suppression des fichiers spécifiés pour l’exclusion.
Notes
Pour plus d’informations sur l’exclusion de fichiers et de dossiers du processus d’empaquetage, consultez Exclusion de fichiers et de dossiers du déploiement.
Le fichier AfterTransformWebConfig.txt répertorie les fichiers collectés pour l’empaquetage après l’exécution de transformationsWeb.config. Dans cette liste, tous les fichiers de transformationWeb.config spécifiques à la configuration, tels que Web.Debug.config et Web.Release.config, sont exclus de la liste des fichiers à empaqueter. Une seule Web.config transformée est incluse à leur place.
Le fichier PostAutoParameterizationWebConfigConnectionStrings.txt contient la liste des fichiers une fois que les chaînes de connexion dans le fichier Web.config ont été paramétrées. Il s’agit du processus qui vous permet de remplacer vos chaînes de connexion par les paramètres appropriés pour votre environnement cible lorsque vous déployez le package.
Le fichier Prepackage.txt contient la liste finalisée des fichiers à inclure dans le package.
Notes
Les noms des fichiers journaux supplémentaires correspondent généralement aux cibles WPP. Vous pouvez passer en revue ces cibles en examinant le fichier Microsoft.Web.Publishing.targets dans le dossier %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web.
Si le contenu de votre package web ne correspond pas à ce que vous attendiez, l’examen de ces fichiers peut être un moyen utile d’identifier à quel moment du processus les problèmes ont été rencontrés.
Conclusion
Cette rubrique décrit comment vous pouvez utiliser la propriété EnablePackageProcessLoggingAndAssert dans MSBuild pour résoudre les problèmes liés au processus d’empaquetage. Il a expliqué les différentes façons dont vous pouvez fournir la valeur de propriété au processus de génération, et il a décrit les informations supplémentaires enregistrées lorsque vous définissez la propriété sur true.
En savoir plus
Pour plus d’informations sur l’utilisation de fichiers projet MSBuild personnalisés pour contrôler le processus de déploiement, consultez Présentation du fichier projet et Présentation du processus de génération. Pour plus d’informations sur WPP et sur la façon dont il gère le processus d’empaquetage, consultez Génération et empaquetage de projets d’application web. Pour obtenir des conseils sur la façon d’exclure des fichiers et dossiers spécifiques des packages de déploiement web, consultez Exclusion de fichiers et de dossiers du déploiement.