2012-03-05 15 views
5

¿Cuál es la diferencia entre las referencias de propiedades como $ (TargetPath) y! (TargetPath) durante los eventos de PreBuildEvent/PostBuildEvent de MSBuild? Me parece que funcionan de forma diferente en algunas situaciones, pero no puedo encontrar ninguna documentación en la "(" formaReferencias de propiedades de MSBuild

http://msdn.microsoft.com/en-us/library/bb383819.aspx Esto es lo más cerca que parecen ser capaces de encontrar

Ejemplo:..

<Target Name="BeforeBuild"> 
    <CreateProperty Value="NewValue"> 
    <Output TaskParameter="Value" PropertyName="TargetPath" /> 
    </CreateProperty> 
</Target> 

<PropertyGroup> 
    <PreBuildEvent> 
echo $(TargetPath) 
echo !(TargetPath) 
    </PreBuildEvent> 
</PropertyGroup> 

se hará eco de la TargetPath original y luego echo "NewValue". sin embargo, esto no funciona para otras propiedades que he definido.

Cualquier ayuda muy apreciada!

+1

Interesante. ¿Puedes publicar un archivo de prueba completo que muestre este comportamiento? Intenté reproducirlo extendiendo una muestra "ConsoleApplication1.csproj", pero no pude. El 'echo! (TargetPath)' simplemente imprime "! (TargetPath)". –

+0

Si algo no está documentado, no debe usarlo en absoluto. –

+2

Estaba meditando e "investigando" sobre esto. Parece que el único momento "! (" Es significativo para MSBuild, aparte del texto simple, por supuesto, es para usar como "no operador" en el atributo 'Condición'. Ejemplo:' Condición = "! ('$ (foo) '==' 1 ') "'. ¿Es posible, que use alguna herramienta personalizada, preprocesamiento o similar que interprete el "! (TargetPath)" como algo más que texto sin formato? –

Respuesta

1

¡Recién hemos reescrito nuestro proceso de construcción, puedo decir honestamente que nunca he usado! para hacer referencia a cualquier cosa, todo lo que he usado para este personaje es decir "NO" como en un operador booleano.

De hecho, no puedo encontrar este uso en ningún lugar de la documentación ni reproducir el comportamiento que está describiendo.

Sospecho fuertemente que esta no es una sintaxis válida/compatible para hacer referencia a algo.

Cuestiones relacionadas