92 votes

Comment faire en sorte que la fonctionnalité 'Publier' de Visual Studio inclue les fichiers de l'événement post-build

Je suis actuellement en train de tenter d'utiliser Visual Studio 2010 "Publier" et MSDeploy une fonctionnalité permettant de gérer mon site web besoins en matière de déploiement, mais se sont heurtés à un obstacle en ce qui concerne la personnalisation de l'emballage en fonction de ma configuration de build.

Je développe dans un environnement 32 bits, mais besoin de créer un package pour un environnement 64 bits, donc dans la "Libération" de la configuration j'ai un post créer un événement que des copies de la version 64 bits d'un tiers de la dll dans le répertoire bin d'écraser la version 32 bits. Lorsque j'utilise le "Publier" fonctionnalité, même si la bonne 64bit dll est copié dans le répertoire bin, il n'est pas inclus dans le package.

Est-il possible d'obtenir le "Publier" pour inclure des fichiers qui ont été copiés dans le répertoire bin lors d'un événement post-construction?

94voto

Sayed Ibrahim Hashimi Points 25707

J'ai répondu à une semblable mais différente de la question à http://stackoverflow.com/questions/2747081/how-do-you-include-additional-files-using-vs2010-web-deployment-packages.

Dans votre scénario, vous êtes à l'aide de post-construction de l'événement, je vous recommande de déposer le post-construction de l'événement et de mettre en œuvre vos actions à l'aide de votre propre MSBuild cibles au lieu de l'événement post-construction. Vous trouverez ci-dessous le texte de la réponse.


De: Comment avez-vous d'inclure d'autres fichiers à l'aide de VS2010 web packages de déploiement?


Grande question. Je viens de poster une très détaillé d'une entrée de blog à ce sujet à l' Outil de Déploiement Web (MSDeploy) : Construire le programme, y compris des fichiers supplémentaires ou exclure des fichiers spécifiques.

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

Y Compris Les Fichiers Supplémentaires

Y compris les fichiers supplémentaires dans le paquet est un peu plus difficile, mais toujours pas de bigee si vous êtes à l'aise avec MSBuild, et si vous n'êtes pas alors lisez ceci. Pour ce faire nous avons besoin de raccordement dans le cadre du processus de collecte les fichiers pour l'emballage. La cible, nous devons étendre est appelé CopyAllFilesToSingleFolder. Cet objectif a une propriété de dépendance, PipelinePreDeployCopyAllFilesToOnefolderdependson, que nous pouvons exploiter et de les injecter notre propre cible. Nous allons donc créer une cible nommée CustomCollectFiles et de les injecter dans le processus. Nous parvenons avec la suivante (n'oubliez pas après l'instruction d'importation).

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

Cela va ajouter notre cible pour le processus, il nous faut maintenant définir la cible elle-même. Supposons que vous avez un dossier nommé des Fichiers Supplémentaires qui se trouve à 1 niveau au-dessus de votre projet web. Vous souhaitez inclure tous les fichiers. Voici la CustomCollectFiles cible et nous discutons par la suite.

<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 j'ai fait était de créer le point _CustomFiles et dans l'attribut include a dit à ramasser tous les fichiers dans le dossier et le dossier de dessous. Puis-je utiliser cet élément pour remplir la FilesForPackagingFromProject élément. C'est l'élément qui MSDeploy utilise pour ajouter des fichiers supplémentaires. Notez également que j'ai déclaré les métadonnées DestinationRelativePath valeur. Cela permettra de déterminer le chemin d'accès relatif qu'il sera placé dans le paquet. J'ai utilisé la déclaration des Fichiers Supplémentaires%(RecursiveDir)%(Filename)%(Extension) ici. Ce qui est dit est à placer dans la même position relative dans le paquet tel qu'il est, en vertu de l'Extra dossier de Fichiers.

L'exclusion de fichiers

Si vous ouvrez le fichier de projet d'une application web créé avec VS 2010 vers le bas, 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 la SV. Clic droit sur le projet pick Décharger le Projet. Puis cliquez droit sur le projet déchargé et sélectionnez Modifier le Projet.

Cette déclaration comprend les objectifs et les tâches que nous avons besoin. La plupart de nos personnalisations doivent être postérieure à celle de l'importation, si vous n'êtes pas sûr si après! Si vous avez des fichiers à exclure, il y a 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 sont inclus dans votre application web, mais vous voulez que le fichier soit exclu de la création de packages. Vous pouvez placer le fragment de code ci-dessous après que l'instruction import.

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

En déclarant le remplissage de ce point, les fichiers seront automatiquement exclues. Remarque l'utilisation de la FromTarget métadonnées ici. Je ne vais pas entrer dans les ici, mais vous devez savoir de toujours spécifier que.

13voto

brodie Points 3020

J'ai trouvé une solution pour contourner le problème en utilisant la ExcludeFilesFromDeployment élément dans le fichier de projet. J'ai eu l'idée de Déploiement Web: Exclusion des Fichiers et des Dossiers

Donc, si vous avez besoin de package de fichiers de projet tels qu'ils existent dans votre répertoire de projet après avoir réussi à construire et associés post étapes de génération puis effectuez les opérations suivantes.

  1. Edit "Package/Publier le site Web du projet paramètres et sélectionnez les Éléments à déployer pour "Tous les fichiers dans ce projet dossier"
  2. Décharger le projet
  3. Clic droit sur le projet déchargé et sélectionnez modifier le projet de config
  4. Recherchez l'élément PropertyGroup associée au paramètre de configuration par exemple. "Libération"
  5. À l'intérieur de l'élément PropertyGroup ajouter les éléments suivants et les exclure des fichiers et dossiers que vous ne voulez pas dans le package

    <ExcludeFilesFromDeployment>*.cs;**\.svn\**\*.*;Web.*.config;*.csproj*</ExcludeFilesFromDeployment> <ExcludeFoldersFromDeployment>.svn;Controllers;BootstrapperTasks;Properties</ExcludeFoldersFromDeployment>

  6. Sauvegarder et recharger votre projet

Cela résout mon problème pour le moment, mais si il y a une meilleure solution, alors s'il vous plaît laissez-moi savoir, que ce n'est pas idéal en raison de la hackery impliqués, mais encore une fois c'est peut-être rare scénario de déploiement??

8voto

Gomes Points 419

Sélectionnez vos fichiers ou dossiers et modifiez l'action de construction en tant que contenu à partir de la fenêtre Propriétés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X