Comment faire pour que la fonctionnalité Visual Studio ‘Publish’ inclue des fichiers d’un événement post-build?

Je tente actuellement d’utiliser Visual Studio 2010 «Publish» et les fonctionnalités MSDeploy pour gérer mes besoins de déploiement Web, mais j’ai rencontré un problème de personnalisation du package en fonction de ma configuration de build.

Je développe dans un environnement 32 bits mais j’ai besoin de créer un package de publication pour un environnement 64 bits. Dans la configuration ‘Release’, j’ai un événement post-build qui copie la version 64 bits d’une DLL tierce dans le répertoire bin en remplaçant la version 32 bits. . Lorsque j’utilise la fonctionnalité “Publier”, même si le dll 64 bits correct est copié dans le répertoire bin, il n’est pas inclus dans le package.

Existe-t-il un moyen d’obtenir la publication pour inclure les fichiers qui ont été copiés dans le répertoire bin lors d’un événement de post-génération?

J’ai répondu à une question similaire mais différente sur Comment inclure des fichiers supplémentaires à l’aide des packages de déploiement Web VS2010? .

Dans votre scénario, vous utilisez un événement post-build, je vous recommande de supprimer l’événement post-build et d’implémenter vos actions à l’aide de vos propres cibles MSBuild au lieu d’un événement post-build. Vous trouverez ci-dessous le texte de l’autre réponse.


De: Comment inclure des fichiers supplémentaires à l’aide de packages de déploiement Web VS2010?


Bonne question Je viens de poster une entrée de blog très détaillée à ce sujet sur Web Deployment Tool (MSDeploy): créer un 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 les fichiers supplémentaires

Inclure des fichiers supplémentaires dans le paquet est un peu plus difficile, mais toujours pas un bigee si vous êtes à l’aise avec MSBuild, et si vous ne le lisez pas alors. 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 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 les éléments suivants (rappelez-vous après la déclaration d’importation).

  CustomCollectFiles; $(CopyAllFilesToSingleFolderForPackageDependsOn);   

Cela va append notre cible au processus, maintenant nous devons définir la cible elle-même. Supposons que vous ayez un dossier nommé Extra Files, situé à 1 niveau au-dessus de votre projet Web. Vous souhaitez inclure tous ces fichiers. Voici la cible CustomCollectFiles et nous en discutons après.

   <_customfiles Include="..\Extra Files\**\*">  Extra Files\%(RecursiveDir)%(Filename)%(Extension)    

Ici, j’ai créé l’élément _CustomFiles et, dans l’atsortingbut Include, lui a demandé de récupérer tous les fichiers de ce dossier et tous les dossiers situés en dessous. Ensuite, j’utilise cet élément pour remplir l’élément Item FilesForPackagingFromProject. C’est l’élément que MSDeploy utilise réellement pour append des fichiers supplémentaires. Notez également que j’ai déclaré la valeur de métadonnées DestinationRelativePath. Cela déterminera le chemin relatif qui sera placé dans le package. J’ai utilisé l’instruction Extra Files% (RecursiveDir)% (Nom de fichier)% (Extension) ici. Ce que cela signifie, c’est de le placer dans le même emplacement relatif dans le package que dans le dossier Extra Files.

Hors fichiers

Si vous ouvrez le fichier de projet d’une application Web créée avec VS 2010 vers le bas, vous trouverez une ligne avec.

  

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 toutes les cibles 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 le savoir si après! Donc, si vous avez des fichiers à exclure, il existe un nom d’élément, ExcludeFromPackageFiles, qui peut être utilisé pour cela. Par exemple, supposons que vous ayez un fichier nommé Sample.Debug.js inclus dans votre application Web, mais que vous souhaitez que ce fichier soit exclu des packages créés. Vous pouvez placer l’extrait de code ci-dessous après cette instruction d’importation.

   Project   

En déclarant remplir cet élément, les fichiers seront automatiquement exclus. Notez l’utilisation des métadonnées FromTarget ici. Je ne vais pas entrer là-dedans ici, mais vous devez savoir toujours le spécifier.

J’ai trouvé une solution de contournement pour le problème en utilisant l’élément ExcludeFilesFromDeployment dans le fichier de projet. J’ai eu l’idée du déploiement Web: exclure les fichiers et les dossiers

Donc, si vous devez empaqueter des fichiers de projet tels qu’ils existent dans votre répertoire de projet après une génération réussie et les étapes de post-construction associées, procédez comme suit.

  1. Modifier les parameters du projet “Package / Publish Web” et
    sélectionnez Éléments à déployer pour être “Tous les fichiers dans ce dossier de projet”
  2. Décharger le projet
  3. Faites un clic droit sur le projet déchargé et sélectionnez pour éditer la configuration du projet
  4. Recherchez l’élément PropertyGroup associé au paramètre de configuration, par exemple “Release”
  5. Dans l’élément PropertyGroup , ajoutez les éléments suivants et excluez les fichiers et dossiers que vous ne voulez pas inclure dans le package.

     *.cs;**\.svn\**\*.*;Web.*.config;*.csproj* .svn;Controllers;BootstrapperTasks;Properties 
  6. Enregistrez et rechargez votre projet

Cela résout mon problème pour le moment mais s’il existe une meilleure solution, merci de me le faire savoir, car ce n’est pas idéal en raison du piratage impliqué, mais là encore, il s’agit d’un scénario de déploiement inhabituel?

Sélectionnez vos fichiers ou dossiers et Modifier l’action de création en tant que contenu de la fenêtre Propriétés.

L’ajout du dossier bin (et de son contenu) au projet entraînait la copie des fichiers dans le répertoire de sortie de publication.

Pour moi, mon problème était que je devais placer un fichier de licence de logiciel propriétaire dans le dossier bin /, mais je ne voulais pas le copier manuellement à chaque déploiement.

Cela utilisait Visual Studio 2015 Professional

Je sais que c’est une vieille question mais rien de tout cela n’a fonctionné pour moi.

En 2017, je viens de cliquer avec le bouton droit sur le dossier supplémentaire à publier et de le publier.