2012-03-05 16 views
5

MSBuild PreBuildEvent/PostBuildEvent olayları sırasında $ (TargetPath) ve! (TargetPath) gibi özellik başvuruları arasındaki fark nedir? "! (" Ben bazı durumlarda farklı çalışır ama formdaki herhangi bir belge olduğunu bulmakMSBuild Özellik Referansları

http://msdn.microsoft.com/en-us/library/bb383819.aspx Bu en yakın olan ben bulmak mümkün görünmektedir

Örnek:..

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

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

"newvalue". Bu ancak tanımladığınız diğer özellikleri için çalışmıyor yankı sonra orijinal TargetPath yankı ve Will.

Herhangi bir yardım çok takdir!

+1

İlginç. Bu davranışı sergileyen eksiksiz bir proje dosyası gönderebilir misiniz? Ben bir örnek "ConsoleApplication1.csproj" uzatarak çoğaltmaya çalıştım, ama yapamadı. Echo! (TargetPath) 'sadece"! (TargetPath) "yazdı. –

+0

Bir şey belgelenmemişse, hiç kullanmamalısınız. –

+2

Bu konuda kafa yoruyordum ve "araştırıyordum". Tek bir zamana benziyor "(MSBuild için anlamlıdır), düz metin haricinde," Durum "özniteliğinde" operatör-dışı "olarak kullanmak içindir. Örnek:' Durum = "! ('$ (foo) '==' 1 ')' 'Hiç mümkün değil, bazı özel araçlar, ön işleme veya"! (TargetPath) "i başka bir şey olarak yorumlayan benzer bir metin kullanıyorsunuz? –

cevap

1

Derleme sürecimizi yeniden yazdıktan sonra, hiç kullanmadım diyebilirim! Herhangi bir şeye başvurmak için, bu karakteri kullanmış olduğum tek şey, bir boolean operatöründe olduğu gibi "DEĞİL" demek. Aslında bu kullanımı belgede herhangi bir yerde bulamıyorum veya tanımladığınız davranışı yeniden üretemiyorum.

Bunun bir şeylere başvurmak için geçerli/desteklenen bir sözdizimi olmadığından şüpheleniyorum.