2012-03-05 19 views
5

MSBuild PreBuildEvent/PostBuildEventイベント中の$(TargetPath)や!(TargetPath)などのプロパティ参照の違いは何ですか? 。「!(」私はこれは私が見つけることができるように見える最も近いMSBuildプロパティの参照

http://msdn.microsoft.com/en-us/library/bb383819.aspx 彼らはいくつかの状況で異なる動作をするが、私は、フォーム上の任意のドキュメントを見つけることができないことがわかり

例:。

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

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

は、元TargetPathがエコーして、「NEWVALUEを」エコー。しかし、これは私が定義されている他のプロパティでは動作しませんでしょう。

感謝すべてのヘルプ!

+1

興味深い。この現象を示す完全なprojファイルを投稿できますか?サンプル "ConsoleApplication1.csproj"を拡張して再現しようとしましたが、できませんでした。 'echo(TargetPath)'は単に "!(TargetPath)"を出力します。 –

+0

何かが文書化されていない場合は、まったく使用しないでください。 –

+2

私はこれについて熟考し、「研究」していました。これは唯一の時間のように見える "!("はMSBuildにとって意味があるのはもちろんのこと、プレーンテキスト以外は 'Condition'属性の" not-operator "として使用されます)例:' Condition = "!( '$( foo) '==' 1 ') "' '!(TargetPath)」を何か他のものとして解釈してプレーンテキストとするカスタムツールや前処理などを使用することは可能ですか? –

答えて

1

私たちのビルドプロセスを書き直しただけで、私はまったく使ったことがないと正直に言うことができます!何かを参照するために、これまで私がこの文字を使用したのは、ブール演算子のように "NOT"と言うことです。

実際、この使用方法はドキュメントのどこにも記載されていないか、説明している動作を再現できません。

これは、何かを参照するための有効な/サポートされていない構文だと強く思っています。

関連する問題