2008-09-29 19 views
13

¿Alguien sabe cómo obtener el nombre del OBJETIVO (/ t) invocado desde la línea de comandos de MSBuild? Hay unos pocos tipos de objetivos que se pueden llamar y quiero usar esa propiedad en una notificación a los usuarios.MSBuild - Obteniendo el destino llamado desde la línea de comando

Ejemplo:

msbuild project.proj /t: ApplicationDeployment/p: Medio Ambiente = DEV

Quiero acceso a las palabras objetivo ApplicationDeployment en mi archivo .proj.

¿Hay alguna propiedad a la que pueda acceder? ¿Alguna pista de cómo hacer esto?

EDITAR: No quiero tener que pasar también una propiedad para obtener esto.

ACTUALIZACIÓN: Esto se basa en scripts de implementación utilizando scripts de MSBuild. Mi servidor de compilación no se usa para implementar código, solo para compilar. El servidor de compilación en sí tiene notificaciones de compilación que se pueden habilitar.

Respuesta

6

¡He encontrado la respuesta!

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

Me gustaría dar crédito parcial al apático. No estoy seguro de cómo hacer eso.

+1

¿Cómo es esa una respuesta a su pregunta?Esto no le dará la lista de los objetivos invocados en la línea de comando, sino que creará la nueva propiedad cuando se ejecute una tarea en particular. ¿Tu pregunta fue incorrecta? –

+0

En esencia, esto logra el mismo resultado final. Esto le permitirá establecer una propiedad que le diga cuál fue el objetivo llamado (en mi caso, AppDeploy vs DBDeploy). En cada instancia de llegar a cada objetivo, puede establecer esta misma propiedad. Elaboré un poco más agregando cosas al valor que creo. – ferventcoder

8

No estoy seguro de cómo hacer exactamente lo que pregunta, pero ¿podría pasar esa cadena usando la opción/p?

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

La única manera que puedo ver de hacerlo es utilizar una propiedad condicional en cada objetivo, y establecer así el primer objetivo que se invoca.

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

... 
</Target> 
+0

Podría, pero me gustaría saber cómo acceder al objetivo en sí. – ferventcoder

+0

Gracias por el voto negativo. Leí la documentación de MSBuild para verificar, y no creo que MSBuild ofrezca esta información. Solución alternativa ofrecida. –

+0

Aprecio la solución –

3

No hay forma de hacer esto (que yo sepa). MSBuild no tiene una propiedad para la lista de objetivos solicitados para compilar.

Sin embargo, si encuentra una manera, tenga en cuenta que podría no ser un solo objetivo, sino una lista de objetivos para compilar.

+0

Derecha. Entiendo. : D – ferventcoder

0

Recomendaría utilizar un servidor como CCNET para gestionar las ejecuciones de compilación y las notificaciones. Claro, puede hacer cosas en su script de MSBuild para enviar notificaciones, pero ese dominio pertenece al servidor de compilación.

+0

Think scripts de despliegue. – ferventcoder

+0

He editado para mayor claridad. Gracias por señalar que – ferventcoder

Cuestiones relacionadas