Свойства msbuild, инициализированные из функций, не могут быть преобразованы в элементы? - PullRequest
2 голосов
/ 29 июня 2011

Я пытаюсь создать проект msbuild, в котором информация о зависимости читается из текстового файла. У меня есть текстовый файл с именем project.dep, который содержит разделенный точкой с запятой список имен проектов. В этом примере файл содержит a; b; c; d

Я ожидал, что приведенный ниже код сгенерирует два идентичных списка предметов:

<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

Это не то, что я ожидал. Мне нужно сопоставить каждое имя в файле с отдельным элементом. Есть идеи?

1 Ответ

4 голосов
/ 29 июня 2011

При чтении из файла все содержимое считается одним элементом, поэтому «a; b; c; d» - при передаче в спецификацию элемента, когда определено @ (from_file_items) - не разделяется так же, как при передаче в @ (inline_items). MSBuild экранирует значение, вам нужно удалить его.

Изменить это:

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

к этому:

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