2011-06-29 2 views
2

依存関係情報がテキストファイルから読み込まれるmsbuildプロジェクトを作成しようとしています。プロジェクト名のセミコロンで区切られたリストを含むproject.depという名前のテキストファイルがあります。この例ではファイルが含まれ; B; C; D関数から初期化されたmsbuildプロパティをアイテムに変換できません。

私は、2つの同一のアイテムのリストを生成するために以下のコードが期待:

<PropertyGroup> 
    <from_file>$([System.IO.File]::ReadAllText($(ProjectName).dep))</from_file> 
    <inline>a;b;c;d</inline> 
</PropertyGroup> 

<ItemGroup> 
    <from_file_items Include="$(from_file)" /> 
    <inline_items Include="$(inline)" /> 
</ItemGroup> 

<Target Name="Test"> 
    <Message Text="file: @(from_file_items->'%(filename).item')" /> 
    <Message Text="inline: @(inline_items->'%(filename).item')" /> 
</Target> 

をしかし、結果は異なっている:

Test: 
    file: a;b;c;d.item 
    inline: a.item;b.item;c.item;d.item 

この私が期待したものではありません。ファイル内の各名前を別々の項目にマップする必要があります。何か案は?

答えて

4

ファイルから読み取ると、コンテンツ全体が1つのアイテムと見なされるため、 "a; b; c; d" - @(from_file_items)が定義されているときにアイテム仕様に渡されたとき - @(inline_items)に渡されるときと同じように分割されます。 MSBuildは値をエスケープしています。エスケープする必要があります。

変更この:これに

<from_file_items Include="$(from_file)" /> 

<from_file_items Include="$([MSBuild]::Unescape($(from_file)))" /> 
+0

偉大な答え。ありがとう、それはまさに問題でした。 – samwise