2008-09-29 15 views
13

Est-ce que quelqu'un sait comment obtenir le nom de TARGET (/ t) appelé à partir de la ligne de commande MSBuild? Il y a quelques types de cibles qui peuvent être appelées et je veux utiliser cette propriété dans une notification aux utilisateurs.MSBuild - Obtention de la cible à partir de la ligne de commande

Exemple:

msbuild Project.proj /t: ApplicationDeployment/p: Environnement = DEV

Je veux accès aux mots cibles ApplicationDeployment dans mon dossier .proj.

Y a-t-il une propriété à laquelle je peux accéder? Toute idée de comment faire cela?

EDIT: Je ne veux pas avoir à passer également dans une propriété pour obtenir ceci.

MISE À JOUR: Ceci est basé sur scripts de déploiement à l'aide de scripts MSBuild. Mon serveur de build n'est pas utilisé pour le déploiement du code, uniquement pour la construction. Le serveur de génération a lui-même des notifications de construction qui peuvent être activées.

Répondre

6

J'ai trouvé la réponse!

<Target Name="ApplicationDeployment" > 
    <CreateProperty Value="$(MSBuildProjectName) - $(Environment) - Application Deployment Complete"> 
     <Output TaskParameter="Value" PropertyName="DeploymentCompleteNotifySubject" /> 
    </CreateProperty> 

Je voudrais donner un crédit partiel à apathique. Je ne sais pas comment faire ça.

+1

Comment est-ce une réponse à votre question?Cela ne vous donnera pas la liste des cibles invoquées sur la ligne de commande, il créera la nouvelle propriété quand une tâche particulière est exécutée. Votre question était erronée? –

+0

Essentiellement, cela aboutit au même résultat final. Cela vous permettra de définir une propriété qui peut vous indiquer la cible appelée (dans mon cas AppDeploy vs DBDeploy). Dans chaque cas d'accès à chaque cible, vous pouvez définir cette même propriété. J'ai élaboré un peu plus en ajoutant des choses à la valeur que je crée. – ferventcoder

8

Je ne sais pas comment faire exactement ce que vous demandez, mais pourriez-vous passer cette chaîne en utilisant l'option/p?

msbuild Project.proj /t:ApplicationDeployment /p:Environment=DEV;MyValue=ApplicationDeployment 

La seule autre façon que je peux voir de le faire est d'utiliser une propriété conditionnelle dans chaque cible, et ainsi établir la première cible à appeler.

<Target Name="ApplicationDeployment"> 
<PropertyGroup> 
    <InvokedTarget Condition="'${InvokedTarget}'==''">ApplicationDeployment</InvokedTarget> 
</PropertyGroup> 

... 
</Target> 
+0

Je pourrais, mais je voudrais savoir comment accéder à la cible elle-même. – ferventcoder

+0

Merci pour le vote négatif. J'ai lu la documentation de MSBuild à vérifier, et je ne crois pas que MSBuild offre cette information. Solution de contournement offerte. –

+0

J'apprécie la solution de contournement –

3

Il n'y a aucun moyen de le faire (que je suis au courant). MSBuild n'a pas de propriété pour la liste des cibles à construire. Cependant, si vous trouvez un moyen, gardez à l'esprit qu'il ne s'agit peut-être pas d'une seule cible, mais plutôt d'une liste de cibles à construire.

+0

Droite. Je comprends. : D – ferventcoder

0

Je vous recommande d'utiliser un serveur comme CCNET pour gérer les exécutions de build et les notifications. Bien sûr, vous pouvez faire des choses à votre script MSBuild pour envoyer des notificatioms, mais ce domaine appartient au serveur de construction.

+0

Pensez aux scripts de déploiement. – ferventcoder

+0

J'ai modifié pour plus de clarté. Merci de le signaler – ferventcoder