2012-02-13 11 views
1

パラメータ/p:MyPrefix=Customを指定して、SampleScriptという名前のビルドスクリプトを起動したとします。スクリプトで次のコードがあります:MSBuildプロパティと変数のオーバーロード

<PropertyGroup Condition="$(BuildDefinitionName)=='SampleScript'"> 
    <MyPrefix>Default</MyPrefix> 
</PropertyGroup> 

私が得るように、第一MyPrefixが「カスタム」に設定されている、それが「デフォルト」にオーバーロードされます(私は右です?)。もしそうなら、ユーザー指定のパラメーターを優先順位付けする方法はありますか?それで、オーバーロードされていませんか?あなたが唯一の...上記の例で

<Project ...> 
    <PropertyGroup> 
     <Value>FromStaticProperty</Value> 
    </PropertyGroup> 

    <Target Name="PropertyPrecedence"> 
     <Message Text="Value = '$(Value)'" /> 
     <PropertyGroup> 
     <Value>FromDynamicProperty</Value> 
     </PropertyGroup> 
     <Message Text="Value = '$(Value)'" /> 
    </Target> 
</Project> 

> msbuild /p:Value=FromCommandLine 

を動的にターゲット内の値を変更することで、コマンドラインで指定されたプロパティをオーバーロードすることができます

+0

これはテストしましたか?私が正しく覚えていれば、MSBuildのコマンドライン設定値は、実際にはproject/targetsファイルの値よりも優先されます。 –

+0

なぜ条件を使用しないのですか? 'デフォルト' – KMoraz

+0

@ニックあなたは100%正解です。 – Arnthor

答えて

5

、「FromStaticPropertyは」から供給された値が与えられ、無視されますコマンドラインは "FromDynamicProperty"が使用されます。

抜粋MSBuild Trickeryトリック#27

+0

まあ、それは最も完全な答え、感謝のようです。 – Arnthor

関連する問題