2

依存関係情報がテキスト ファイルから読み取られる msbuild プロジェクトを作成しようとしています。プロジェクト名のセミコロン区切りのリストを含む project.dep という名前のテキスト ファイルがあります。この例では、ファイルに a;b;c;d が含まれています

以下のコードが 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 に答える 1

4

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

これを変える:

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

これに:

<from_file_items Include="$([MSBuild]::Unescape($(from_file)))" />
于 2011-06-29T15:41:08.933 に答える