79 votes

Visual Studio: événement de pré-génération à l'échelle de la solution?

J'ai une solution dans Visual Studio qui contient plusieurs projets. J'aimerais exécuter une commande au tout début de chaque génération, quels que soient les projets impliqués et leur mise à jour.

J'ai essentiellement besoin de quelque chose de similaire à un événement de pré-génération à l'échelle de la solution, mais malheureusement, VS ne semble pas les prendre en charge. Est-ce que quelqu'un connaît un autre moyen de réaliser ce dont j'ai besoin?

45voto

Hans Passant Points 475940

Exigence inhabituelle. Mais cela peut être fait. Ajoutez un nouveau projet à votre solution, utilisez le modèle Visual C ++> General> Makefile Project. Définissez son paramètre NMake> Construire la ligne de commande sur les commandes à exécuter. Utilisez Projet> Dépendances du projet pour que tous les autres projets en dépendent.

44voto

reg Points 275

Alors., J'ai mis à jour le lien et ajouté à court d'informations sur cette solution afin d'éviter toute confusion..

Les Plugins

vsSolutionBuildEvent

Maintenant, nous avons une solution complète en tant que vsSolutionBuildEvent (ou simple vsSBE):

Étendu la gestion des événements dans MS Visual Studio.. description complète et tous les exemples/scripts vous pouvez le voir sur la page de la galerie ci-dessus

En général pour ce problème(question): ce plugin fournit d'autres événements/actions telles que:

Avertissements-Construction, Des Erreurs-Construire, De Sortie De Construire, De Pré-Construction, De Post-Construction, D'Annuler La Construction, De L'Émetteur

pour tous les sous-projets à la fois(Solution de large) ou pour chacun individuellement

enter image description hereenter image description here

Pris En Charge Visual Studio

Version prise en charge de la MS Visual Studio >= 2010 (versions Exprès.. vous savez., voir aussi l' Extension de l'Outil sur VS2013 Express, peut-être aider à comprendre :))

Sources (pour les développeurs)

Oui, il est, voir les liens aussi sur la page de la galerie


Comment cela fonctionne à l'intérieur (pour les développeurs)

Événements de Solution

De base AVANT et après les manifestations pour la solution fonctionne avec Microsoft.VisualStudio.Shell.Interop

Ainsi, le simple IVs.. l'interface de l'application peut résoudre tous nos problème :) le droit ?

MSBuild Moteur

Le MSBuildParser utilisé pour des travaux avec le MSBuild (par exemple, MSBuild Concept - Propriété de la Fonction) - permet également de travailler avec l'environnement du projet individuel en tant que $(var:projet), et de certains contrats pour des travaux supplémentaires avec des variables et des autres (voir aussi la développer direction de)

c'est à dire que vous pouvez utiliser, par exemple:

$(MSBuildBinPath)\MSBuild "$(ProjectPath.Replace('\', '/'):Version)" 
/t:Build /p:Configuration=Release 
...
$([System.Guid]::NewGuid())
$([System.DateTime]::Now.ToString("yyyy.MM.dd HH:mm:ss"))
...

où 'Version' - le projet sélectionné dans votre chargé de solution. Exemple complet avec contrôle de version et d'autres, voir dans le projet doc. - parce que ce n'est pas lié pour le problème actuel (question)

L'analyseur utilise le MSBuild Référence de l'API:

MSBuild Référence de l'API

  • Microsoft.Construire.BuildEngine
  • Microsoft.Construire.La Construction
  • Microsoft.Construire.Conversion
  • Microsoft.Construire.Débogage
  • Microsoft.Construire.L'évaluation
  • Microsoft.Construire.Exceptions
  • Microsoft.Construire.L'exécution
  • Microsoft.Construire.Cadre
  • Microsoft.Construire.La journalisation
  • Microsoft.Construire.Tâches
  • Microsoft.Construire.Utilitaires

Remarque sur l'utilisation - Microsoft.Construire.BuildEngine:

Moteur & Projet de Classe a été supprimée. Cette API est maintenant obsolète.

Par conséquent, la vsSBE utilise l' Évaluation de l'espace de Noms

EnvDTE

Le EnvDTE pour tout le reste.. je veux dire: toutes les Erreurs/d'Avertissement, tous les événements de construction, etc. peut attraper avec toute action personnalisée

17voto

Andriy K Points 1122

Vous pouvez consulter cet article: MSBuild: Extension de la génération de la solution.

Semble être exactement ce dont vous avez besoin.

9voto

erelender Points 3634

Nous faisons cela en ajoutant un projet vide et en définissant des événements de construction pour ce projet. Ensuite, vous devez attribuer une dépendance à chaque projet par rapport à ce projet vide pour vous assurer qu'il est construit à chaque fois.

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