¿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!
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)". –
Si algo no está documentado, no debe usarlo en absoluto. –
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? –