Après publication de l'événement dans Visual Studio

j'essaie d'invoquer la tâche simple après l'événement de publication. Quand je dis "publier", je veux dire publier dans Visual Studio, clic droit sur le projet et en appuyant sur "Publier"...". J'ai inclus (importé) le fichier cible dans le dossier de projet qui fonctionne très bien parce que je l'ai déjà testé sur L'événement de construction. J'ai trouvé à http://msdn.microsoft.com/en-us/library/ms366724.aspx qu'il y a un événement post-publication qui devrait faire ce dont j'ai besoin, mais qui ne le fait pas. Je ne suis pas sûr si c'est un même événement qui devrait déclencher la publication Dans Visual Studio, quelqu'un s'il vous plaît clarifier cela. Ma question Est de savoir comment déclencher n'importe quel type de tâche à partir du fichier cible sur Publish in Visual Studio?

j'ai essayé ceci dans le fichier targets:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="AfterPublish">
        <Message Label="Test"></Message>        
        <Warning Label="Test"></Warning>
    </Target>   
</Project>

j'utilise Visual Studio 2010.

EDIT:

je cherche en fait un moyen d'exécuter certaines actions sur Publish in Visual Studio. Je pensais aussi de l'ajout de Construire des événements, mais je n'ai aucune idée comment déterminer si elle est publier en cours ou non.

EDIT: @Alexey Shcherbak merci pour votre réponse rapide. Je reçois ceci dans ma sortie MSBuild:

12/10/2012 12:29:40 AM:        Done executing task "CallTarget".
12/10/2012 12:29:40 AM:        Done building target "PipelinePreDeployCopyAllFilesToOneFolder" in project "PublishTestApp.csproj".
12/10/2012 12:29:40 AM:Done building project "PublishTestApp.csproj".
Deleting existing files...
Publishing folder /...
Publishing folder Account...
Publishing folder bin...
Publishing folder Scripts...
Publishing folder Styles...
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

donc ma tâche s'exécutera juste après PipelinePreDeployCopyAllFilesToOnefolder mais avant l'adaptation réelle des fichiers et je ne considère pas publier étant fait encore à ce point. Bien sûr, je l'ai testé, donc dans la tâche MSBuild j'étais exécution simple lecture de fichier texte qui est supposé être copié dans le dossier de publication, et il a échoué.

20
demandé sur Andrija Cacanovic 2012-12-09 00:48:02

5 réponses

le menu context publier n'est pas en cours d'exécution" publier " cible (si nous parlons de la publication site Web, pas la publication paquet ClickOnce).

si vous utilisez VS2010 - le menu contextuel lancera la cible" PipelinePreDeployCopyAllFilesToOnefolder", et dans VS2012 (gardez cela à l'esprit si vous allez basculer) il lancera la cible" MSDeployPublish".

je suppose que vous devriez lire cette question et réponse . Jez et moi fourni une réponse assez complète sur la façon de s'accrocher à avant\après publier cible.

en bref - pour la version MSBuild> = 4.0 vous pouvez utiliser cette approche

<Target Name="Mytarget" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder" >
    <Message Label="Test"></Message>        
    <Warning Label="Test"></Warning>
</Target>

@Edit 1: utiliser CopyAllFilesToSingleFolderForPackage au lieu de PipelinePreDeployCopyAllFilesToOnefolder - les fichiers doivent être copiés après cette cible. Si vous avez besoin de tirer sur votre cible uniquement lors de son lancement dans VS context - check le lien que j'ai posté et ajouter plus de conditions - pour vérifier le lancement de Visual studio comme ceci Condition="'$(BuildingInsideVisualStudio)'=='true' AND '$(VisualStudioVersion)'=='10.0'" Si vous ajoutez plus de contexte comme ce genre de cible, voulez-vous lancer après la diffusion, etc. - il pourrait ajouter plus de contexte et aider les autres à comprendre la question

14
répondu Alexey Shcherbak 2017-05-23 12:10:32

je viens d'écrire un billet sur la façon dont j'ai réalisé ceci dans Visual Studio 2013 ici: http://www.alexdresko.com/2015/02/28/taking-visual-studio-build-and-publish-events-to-the-next-level /

essentiellement, c'est la magie:

<Target Name="Mytarget" AfterTargets="MSDeployPublish" >
    <Message Text="The name of the publish profile is $(DestinationAppRoot)"/>   
    .... Here's where you do something awesome... 
</Target>

je vous encourage à lire le post entier pour plus d'informations.

4
répondu Alex Dresko 2015-02-28 19:22:24

j'ai essayé toutes les autres réponses mais elles n'ont tout simplement pas fonctionné. Dans mon cas, je vais publier un VSTO Add-In avec VS2015, donc peut-être Il ya quelque chose de différent en cours, mais voici deux options qui ont fonctionné:

<Target Name="AfterPublish">
  <Warning Text="publish warning 1" />
</Target>
<Target Name="CustomTarget" AfterTargets="AfterPublish">
  <Warning Text="publish warning 2" />
</Target>

une partie de la raison pour laquelle j'AI (et présumément d'autres) eu un moment difficile avec ceci est que la tâche Message ne semble pas faire quoi que ce soit. Je m'attendais à un texte dans la vue Output , mais rien ne se présentait. Il n'y avait pas de Message articles dans le Error List soit, mais en utilisant Warning à la place, ils sont apparus dans le Error List . Malheureusement, je n'en sais pas assez sur MSBuild pour dire pourquoi Message ne se comporte pas comme prévu.

2
répondu Chris 2017-01-12 19:43:10

Additing my 2 cents

MS a confirmé, que lors de la publication au système de fichiers ils n'ont aucune cible à lancer après cela.

" nous ne supportons pas l'exécution de cibles personnalisées après publication de VS pour le protocole de système de fichiers."

Cité de this SO question

donc ce que nous avons fini par faire est:

  1. utiliser AfterTargets="CopyAllFilesToSingleFolderForPackage" (fonctionne juste avant que les fichiers sont copiés à l'emplacement de publication)
  2. qui exécute un fichier bat
  3. le fichier bat commence par une commande timeout 10 (attend 10 secondes)-pour l'absence d'une meilleure façon.

IMPORTANT: ce fichier bat doit être exécuté de manière asynchrone ainsi le processus de publication continue après qu'il a été lancé, s'il vous plaît se référer à cette réponse ainsi sur la façon de faire cela.

1
répondu Alex 2018-06-19 11:58:10

ma réponse à une autre question pourrait être utile.

AfterPublish script ne s'exécute pas lorsque je publie une web app

en particulier, en utilisant le chemin vers les 'fichiers publiés', vous pouvez passer dans un paramètre via $(WebProjectOutputDir)$(WPPAllFilesInSingleFolder) . Ce serait quelque chose comme c:\{path to *.csproj}\obj\{build configuration}\Package\PackageTmp .

0
répondu Terry 2017-05-23 12:34:38