J'essaie actuellement d'utiliser les fonctionnalités «Publier» et MSDeploy de Visual Studio 2010 pour gérer mes besoins de déploiement Web, mais j'ai rencontré un obstacle en ce qui concerne la personnalisation du package en fonction de ma configuration de build.
Je développe dans un environnement 32 bits mais je dois créer un package de version pour un environnement 64 bits, donc 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 écrasant la version 32 bits . Lorsque j'utilise la fonctionnalité «Publier», même si la DLL 64 bits correcte est copiée dans le répertoire bin, elle n'est pas incluse dans le package.
Existe-t-il un moyen d'obtenir le 'Publier' pour inclure les fichiers qui ont été copiés dans le répertoire bin lors d'un événement post build?
Réponses:
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 l'événement post build, je vous recommande de supprimer l'événement post build et d'implémenter vos actions en utilisant vos propres cibles MSBuild au lieu de l'événement post build. Vous trouverez ci-dessous le texte de l'autre réponse.
De: Comment inclure des fichiers supplémentaires à l'aide des packages de déploiement Web VS2010?
Excellente question. Je viens de publier une entrée de blog très détaillée à ce sujet sur 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).
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.
Ici, ce que j'ai fait a été de créer 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. 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 est de le placer dans le 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.
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.js 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.
En déclarant remplir cet élément, les fichiers seront automatiquement exclus. Notez l'utilisation des métadonnées FromTarget ici. Je n'entrerai pas dans cela ici, mais vous devriez savoir de toujours le préciser.
la source
J'ai trouvé une solution de contournement pour le problème en utilisant l'
ExcludeFilesFromDeployment
élément dans le fichier de projet. J'ai eu l'idée du déploiement Web: exclure des fichiers et des dossiersDonc, si vous devez empaqueter les 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-génération associées, procédez comme suit.
sélectionnez "Tous les fichiers de ce dossier de projet".
PropertyGroup
élément associé au paramètre de configuration, par exemple "Release"Dans l'
PropertyGroup
élément, ajoutez les éléments suivants et excluez les fichiers et dossiers que vous ne voulez pas dans le packageEnregistrez et rechargez votre projet
Cela résout mon problème pour le moment, mais s'il existe une meilleure solution, veuillez me le faire savoir, car ce n'est pas idéal en raison du piratage informatique impliqué, mais encore une fois, c'est peut-être un scénario de déploiement inhabituel?
la source
Sélectionnez vos fichiers ou dossiers et modifiez l'action de construction en tant que contenu de la fenêtre Propriétés.
la source
Je sais que c'est une vieille question, mais aucune de celles-ci n'a fonctionné pour moi.
En 2017 VS, j'ai juste cliqué avec le bouton droit sur le dossier supplémentaire à publier et sélectionnez publier cela a fonctionné.
Exemple:
la source
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 que je ne voulais pas le copier manuellement à chaque déploiement.
Cela utilisait Visual Studio 2015 Professional
la source
Je sais que c'est une vieille conversation mais je suis tombé dessus en essayant de faire la même chose et j'ai pensé qu'il serait utile d'ajouter ce que j'ai trouvé ici.
Presque tous les articles sur l'inclusion de fichiers supplémentaires dans votre composition utilisent cette méthode pour ajouter les éléments
CopyAllFilesToSingleFolderForPackageDependsOn
ouCopyAllFilesToSingleFolderForMSDeployDependsOn
dans lePropertyGroup
et ils ont tous la même chose comme "J'ai ajouté ceci à la fin du fichier ..."C'est ce que j'ai fait et j'ai passé un après-midi à essayer de trouver pourquoi rien ne se passait jusqu'à ce que je réalise qu'il y avait déjà une
PropertyGroup
section en haut du dossier. Quand j'ai mis monCopyAllFilesToSingleFolderForPackageDependsOn
dans cette section, cela a bien fonctionné.J'espère que cela fera gagner du temps à quelqu'un un jour
la source