Excellente question. Je viens de publier un article de blog très détaillé à ce sujet à l'adresse suivante Outil de déploiement Web (MSDeploy) : Construire le paquet en incluant des fichiers supplémentaires ou en excluant des fichiers spécifiques .
Voici le synopsis. Après avoir inclus des fichiers, je montre comment les exclure également.
Inclure des fichiers supplémentaires
L'inclusion de fichiers supplémentaires dans le paquet est un peu plus difficile, mais ce n'est pas grave si vous êtes à l'aise avec MSBuild, et si vous ne l'êtes pas, lisez ceci. Pour ce faire, nous devons nous connecter à la partie du processus qui collecte les fichiers à empaqueter. La cible que nous devons étendre s'appelle CopyAllFilesToSingleFolder. Cette cible possède une propriété de dépendance, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, dans laquelle nous pouvons puiser pour injecter notre propre cible. Nous allons donc créer une cible nommée CustomCollectFiles et l'injecter dans le processus. Nous y parviendrons avec ce qui suit (rappelez-vous après l'instruction import).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Cela ajoutera notre cible au processus, maintenant nous devons définir la cible elle-même. Supposons que vous ayez un dossier nommé Extra Files qui se trouve 1 niveau au-dessus de votre projet web. Vous voulez inclure tous ces fichiers. Voici la cible CustomCollectFiles et nous discutons après cela.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Ici, j'ai créé l'élément _CustomFiles et, dans l'attribut Include, je lui ai demandé de récupérer tous les fichiers de ce dossier et de tout dossier inférieur. Si par hasard vous avez besoin de exclure quelque chose de cette liste, ajoutez un Exclude
de l'attribut _CustomFiles
.
J'utilise ensuite cet élément pour alimenter l'élément FilesForPackagingFromProject. C'est l'élément que MSDeploy utilise réellement pour ajouter des fichiers supplémentaires. Remarquez également que j'ai déclaré la valeur DestinationRelativePath de la métadonnée. Cela déterminera le chemin relatif dans lequel il sera placé dans le paquet. J'ai utilisé la déclaration Extra Files%(RecursiveDir)%(Filename)%(Extension) ici. Cela signifie qu'il faut le placer dans le paquet au même endroit relatif qu'il se trouve dans le dossier Extra Files.
Exclusion de fichiers
Si vous ouvrez le fichier de projet d'une application web créée avec VS 2010, vers le bas de celui-ci, vous trouverez une ligne avec.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
En fait, vous pouvez ouvrir le fichier du projet dans VS. Faites un clic droit sur le projet et choisissez "Unload Project". Ensuite, faites un clic droit sur le projet déchargé et sélectionnez Edit Project.
Cette déclaration comprendra tous les objectifs et toutes les tâches dont nous avons besoin. La plupart de nos personnalisations devraient se faire après cette importation, si vous n'êtes pas sûr, mettez "si" après ! Si vous avez des fichiers à exclure, il existe un élément, ExcludeFromPackageFiles, qui peut être utilisé pour le faire. Par exemple, disons que vous avez un fichier nommé Sample.Debug.xml qui est inclus dans votre application web mais que vous voulez que ce fichier soit exclu des paquets créés. Vous pouvez placer le snippet ci-dessous après l'instruction import.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
En déclarant le remplissage de cet élément, les fichiers seront automatiquement exclus. Notez l'utilisation de l'élément FromTarget
métadonnées ici. Je ne m'y attarderai pas ici, mais vous devez savoir qu'il faut toujours le spécifier.