Comment obtenir la fonctionnalité Visual Studio « Publier » pour inclure des fichiers de l'événement après de construction?

StackOverflow https://stackoverflow.com/questions/3137880

Question

Je tente actuellement d'utiliser Visual Studio 2010 « Publier » et la fonctionnalité MSDeploy pour gérer mes besoins de déploiement Web, mais se sont heurtées à un barrage routier en ce qui concerne la personnalisation de l'emballage en fonction de ma configuration de construction.

je développe dans un environnement 32 bits, mais besoin de créer un package de sortie pour un environnement de 64 bits, donc dans la configuration « Release » J'ai un événement post construction qui copie la version 64 bits d'un dll tiers dans l'écrasement du répertoire bin la version 32 bits. Lorsque j'utilise la fonctionnalité « Publier », même si le dll 64bit correct est copié dans le répertoire bin, il ne soit pas inclus dans le package.

Y at-il un moyen d'obtenir le « Publish » pour inclure des fichiers qui ont été copiés dans le répertoire bin lors d'un événement post construction?

Était-ce utile?

La solution

Je répondu à une question similaire, mais différente Comment incluez-vous des fichiers supplémentaires à l'aide VS2010 packages de déploiement Web .

Dans votre scénario, vous utilisez l'événement post construction, je recommanderais laisser tomber l'événement après de construction et mettre en œuvre vos actions avec vos propres objectifs de MSBuild au lieu de l'événement après de construction. Ci-dessous vous trouverez le texte de l'autre réponse.


De

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


Grande question. Je viens de publier une entrée de blog très détaillé sur ce outil de déploiement Web (MSDeploy): construction de paquet comprenant fichiers supplémentaires ou à l'exclusion des fichiers spécifiques .

Voici le synopsis. Après y compris les fichiers, je montre comment exclure les fichiers.

Y compris des fichiers supplémentaires

Y compris les fichiers supplémentaires dans le paquet est un peu plus difficile, mais toujours pas bigee si vous êtes à l'aise avec MSBuild, et si vous n'êtes pas alors lisez ceci. Pour ce faire, nous devons accrocher dans la partie du processus qui collecte les fichiers pour l'emballage. L'objectif que nous devons étendre est appelé CopyAllFilesToSingleFolder. Cet objectif a une propriété de dépendance, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, que nous pouvons exploiter et injecter notre propre cible. Nous allons donc créer une cible CustomCollectFiles nommé et injecter que dans le processus. Nous y parvenons avec les éléments suivants (souvenez-vous après la déclaration d'importation).

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>

Ceci ajoutera notre objectif au processus, maintenant, nous devons définir la cible elle-même. Supposons que vous avez un dossier nommé Fichiers supplémentaires qui se trouve 1 niveau au-dessus de votre projet web. Vous voulez inclure tous ces fichiers. Voici la CustomCollectFiles cible et nous discutons après.

<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\Extra Files\**\*" />

    <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

Voici ce que je faisais était de créer les _CustomFiles de poste et dans l'attribut Inclure dit à ramasser tous les fichiers dans ce dossier et un dossier en dessous. Puis-je utiliser cet objet pour remplir l'élément FilesForPackagingFromProject. Ceci est l'élément qui MSDeploy utilise en fait pour ajouter des fichiers supplémentaires. Notez également que je déclarais les métadonnées valeur DestinationRelativePath. Cela permettra de déterminer le chemin relatif qu'il sera placé dans l'emballage. J'ai utilisé la déclaration supplémentaire Files% (RecursiveDir)% (Nom du fichier)% (extension) ici. Qu'est-ce qui dit est de le placer dans le même emplacement relatif dans le paquet tel qu'il est dans le dossier supplémentaire des fichiers.

Hors 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 l'intérieur du VS. fichier de projet Faites un clic droit sur le projet choisissez Décharger le projet. Ensuite, faites un clic droit sur le projet et sélectionnez Projet chargé Edition.

Cette déclaration comprendra tous les objectifs et les tâches dont nous avons besoin. La plupart de nos personnalisations devrait être après que l'importation, si vous n'êtes pas sûr de mettre si après! Donc, si vous avez des fichiers à exclure il y a un nom d'élément, ExcludeFromPackageFiles, qui peuvent être utilisés pour le faire. Par exemple, disons que vous avez fichier nommé Sample.Debug.js qui inclus dans votre application Web, mais vous voulez que le fichier à exclure des paquets créés. Vous pouvez placer l'extrait ci-dessous après cette déclaration d'importation.

<ItemGroup>
  <ExcludeFromPackageFiles Include="Sample.Debug.xml">
    <FromTarget>Project</FromTarget>
  </ExcludeFromPackageFiles>
</ItemGroup>

En déclarant peuplant ce point, les fichiers seront automatiquement exclus. Notez l'utilisation des métadonnées de FromTarget ici. Je ne vais pas entrer dans ce ici, mais vous devez savoir spécifier toujours.

Autres conseils

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

Donc, si vous avez besoin pour emballer des fichiers de projet tels qu'ils existent dans votre répertoire de projet après une construction réussie et associés étapes post construction puis procédez comme suit.

  1. Modifier "Package / Publication Web" Paramètres du projet et
    Sélectionnez les é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 chargé et sélectionnez pour modifier le projet config
  4. Localiser l'élément de PropertyGroup associé au paramètre de configuration, par exemple "Release"
  5. Dans l'élément PropertyGroup ajouter dans les éléments suivants et exclure des fichiers et dossiers que vous ne voulez pas dans le paquet

    <ExcludeFilesFromDeployment>*.cs;**\.svn\**\*.*;Web.*.config;*.csproj*</ExcludeFilesFromDeployment>
    <ExcludeFoldersFromDeployment>.svn;Controllers;BootstrapperTasks;Properties</ExcludeFoldersFromDeployment>
    
  6. Enregistrer et recharger votre projet

Cela résout mon problème pour l'instant, mais s'il y a une meilleure solution alors s'il vous plaît laissez-moi savoir, car ce n'est pas idéale en raison de la carriole en jeu, mais là encore peut-être cela est un scénario de déploiement hors du commun?

Sélectionnez vos fichiers ou dossiers et le changement Action de génération en tant que contenu de la fenêtre Propriétés.

Je sais que c'est une vieille question, mais aucun d'entre eux a fonctionné pour moi.

En 2017 VS je juste cliqué sur le dossier supplémentaire à publier et sélectionnez publier travaillé.

Exemple:

Ajout du dossier bin (et son contenu) au projet fait les fichiers à copier dans le répertoire de sortie publier.

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 copier manuellement chaque déploiement.

utilisait Visual Studio 2015 Professional

Je sais que c'est une vieille conversation, mais je suis tombé sur lui en essayant de faire la même chose et je pensais qu'il serait utile d'ajouter ce que je trouve ici.

Presque tous les articles sur y compris les fichiers supplémentaires dans l'utilisation de la publication de cette méthode d'ajouter des éléments de CopyAllFilesToSingleFolderForPackageDependsOn ou CopyAllFilesToSingleFolderForMSDeployDependsOn dans le PropertyGroup et ils ont tous même quelque chose comme «j'ajouté à la fin du fichier ... »

est ce que je l'ai fait et passé un après-midi à essayer de trouver pourquoi rien ne se passait jusqu'à ce que je me suis aperçu qu'il y avait déjà une section PropertyGroup en haut du fichier. Quand je mets mon CopyAllFilesToSingleFolderForPackageDependsOn dans cette section, il a bien fonctionné.

Espérons que cela fait gagner du temps de quelqu'un un jour

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top