Excellente question. Je viens de publier une entrée de blog très détaillée à ce sujet à Web Deployment Tool (MSDeploy): Build Package comprenant des fichiers supplémentaires ou excluant des fichiers spécifiques .
Voici le synopsis. Après avoir inclus des fichiers, je montre également comment exclure des fichiers.
Y compris des fichiers supplémentaires
L'inclusion de fichiers supplémentaires dans le package est un peu plus difficile mais toujours 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 pour l'empaquetage. La cible que nous devons étendre est appelée CopyAllFilesToSingleFolder. Cette cible a une propriété de dépendance, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, dans laquelle nous pouvons puiser et injecter notre propre cible. Nous allons donc créer une cible nommée CustomCollectFiles et l'injecter dans le processus. Nous y parvenons avec ce qui suit (rappelez-vous après la déclaration d'importation).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Cela ajoutera notre cible au processus, nous devons maintenant 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 souhaitez inclure tous ces fichiers. Voici la cible CustomCollectFiles et nous en discuterons après.
<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 Inclure, je lui ai dit de récupérer tous les fichiers de ce dossier et de tout dossier en dessous. Si, par hasard, vous devez exclure quelque chose de cette liste, ajoutez un Exclude
attribut à _CustomFiles
.
Ensuite, j'utilise cet élément pour remplir l'élément FilesForPackagingFromProject. C'est l'élément que MSDeploy utilise réellement pour ajouter des fichiers supplémentaires. Notez également que j'ai déclaré la valeur DestinationRelativePath des métadonnées. Cela déterminera le chemin relatif dans lequel il sera placé dans le package. J'ai utilisé l'instruction Extra Files% (RecursiveDir)% (Filename)% (Extension) ici. Ce que cela signifie, c'est de le placer au même emplacement relatif dans le package que sous le dossier Extra Files.
Exclure des 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" />
BTW, vous pouvez ouvrir le fichier de projet à l'intérieur de VS. Cliquez avec le bouton droit sur le projet Choisissez Décharger le projet. Cliquez ensuite avec le bouton droit sur le projet déchargé et sélectionnez Modifier le projet.
Cette déclaration comprendra tous les objectifs et tâches dont nous avons besoin. La plupart de nos personnalisations devraient être après cette importation, si vous n'êtes pas sûr de les mettre après! Donc, si vous avez des fichiers à exclure, il existe un nom d'é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 souhaitez que ce fichier soit exclu des packages créés. Vous pouvez placer l'extrait ci-dessous après cette instruction d'importation.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
En déclarant remplir cet élément, les fichiers seront automatiquement exclus. Notez l'utilisation des FromTarget
métadonnées ici. Je n'entrerai pas dans cela ici, mais vous devriez savoir de toujours le préciser.