2011-03-07 5 views
0

MsBuildはどのようにプロパティの値を取得するのですか?MSビルドのプロパティ階層はどのように維持されていますか?

例えば、

<TempProperty>Property Value</TempProperty> 

ここでは、どこでも$(TempProperty)を使用して値を取得できます。このような構成となっている

今のシナリオは私が作ったされたカスタムタスク..代わりに、私は$(TempProperty)...することができ、誰を取得していますタグで「プロパティ値」を取得する今

<PropertyGroup> 
    <ItemList> 
     <ConfigChange> 
     <PlaceHolder>#MACHINE_NAME#</PlaceHolder> 
     <Value>$(TempProperty)</Value> 
     <IsList>False</IsList> 
     </ConfigChange> 
    </ItemList> 
    </PropertyGroup> 

タグで実際の価値を得る方法を教えてください???

ありがとうございます。

私は実際の問題と解決策を持っています...私はここで私の問題を記述することができなかったと思います..問題は.. ..私のカスタムタスクでは、私がXMLNode "ItemList"を解析しようとしたとき、Itemの値として "$(TempProperty)"を取得していましたが、これは渡されたXMLに存在するものが正しいためです。

は、だから私は二つのことをした、この問題を克服するために..

私が代わりにpropertyGroupのItemGroupを作成し、代わりにファイルパスの私のカスタムタスクにそのItemGroupを通過した。..ので、今私のコードで私が希望取得しています値。

あなたの返信ありがとうございます。

+0

答えを詳細な回答として追加し、その問題を解決済みとマークする必要があります。 –

答えて

0

Ritchさんの提案に私の解決策を追加しています。

当初、私は、私は、ファイルのパスので、自分自身を提供していたので、

<TempProperty>Property Value</TempProperty> 

<PropertyGroup> 
    <ItemList> 
     <ConfigChange> 
     <PlaceHolder>#MACHINE_NAME#</PlaceHolder> 
     <Value>$(TempProperty)</Value> 
     <IsList>False</IsList> 
     </ConfigChange> 
    </ItemList> 
    </PropertyGroup> 

は今、私の問題は、私は私の性質が

<UpdatePegasusConfigXML 
     Environment="$(Environment)" 
     Instance="$(Instance)" 
     BuildSourceRoot="$(BuildSourceRoot)" 
     ></UpdatePegasusConfigXML> 

ように私のカスタムタスクに一部ファイル提供した持っていました"値"タグに入れられたプロパティ値を取得していない値が必要なので、コードレベルで "プロパティ値"の代わりに "$(TempProperty)"を取得していました

今私がやったことは、私はこの

<ItemGroup> 
    <PlaceHolders Include="#MACHINE_NAME#"> 
     <Value>$(TempProperty)</Value> 
     <IsList>True</IsList> 
    </PlaceHolders> 
</ItemGroup> 

今、私は、入力の1つとしてIteamGroup取るために私のカスタムタスクを更新これ

<UpdatePegasusConfigXML 
     Environment="$(Environment)" 
     Instance="$(Instance)" 
     BuildSourceRoot="$(BuildSourceRoot)" 
     PlaceHolders="@(PlaceHolders)" 
     ></UpdatePegasusConfigXML> 
に変更呼び出すようなItemGroup作成したプロパティグループを作成するのではなく、でした

コードレベルで、ItemGroupの "Value"タグの値を取得できました。

わかりやすかったと私の解決策を説明してくれることを願っています。

0

本当にあなたの問題を診断するには十分ではありません。一見すると正しいように見えますが、TempPropertyのPropertyGroupはどこで宣言されていますか?説明たとえば

は、ここではC#プロジェクトファイルからの抜粋です:(それはその時点での空白の場合)

 <?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
     <PropertyGroup> 
       <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
       ... 
     </PropertyGroup> 

     <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
      ... 
     </PropertyGroup> 

構成プロパティのデバッグに設定されています。次のグループでは、ConfurationとPlatformプロパティのキーを押します。

プロパティ値が正しく表示されるためには、プロパティ値を使用する前に宣言する必要があります。

問題の理解に役立つもう少しの文脈を提供してください。

0

私はちょうどこの試みた:

Task "Message" 
    TempProperty: property value 
Done executing task "Message". 
Task "Message" 
    ItemList: 
    <ConfigChange xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PlaceHolder>#MACHINE_NAME#</PlaceHolder> 
    <Value>property value</Value> 
    <IsList>False</IsList> 
    </ConfigChange> 
Done executing task "Message". 

あなたが何か他のものを見ている:

<Project 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
    ToolsVersion="4.0" 
    DefaultTargets="Demo" > 

    <PropertyGroup> 
    <TempProperty>property value</TempProperty> 
    <ItemList> 
     <ConfigChange> 
     <PlaceHolder>#MACHINE_NAME#</PlaceHolder> 
     <Value>$(TempProperty)</Value> 
     <IsList>False</IsList> 
     </ConfigChange> 
    </ItemList> 
    </PropertyGroup> 



    <Target Name="Demo"> 
    <Message Text="TempProperty: $(TempProperty)"/> 
    <Message Text="ItemList: $(ItemList)"/> 
    </Target> 


</Project> 

そして、私の結果を?

+0

私は明らかにされていないと思う..あなたが指示した通りに値を取得していますが、私のカスタムロジックでXMLNode "ItemList"を選択すると、代わりに希望の値が得られません... " $(TempProperty) "を値として使用します... – Sumit

関連する問題