может ли msbuild разрешить подстановочные выражения, полученные в результате преобразования? - PullRequest
2 голосов
/ 30 июня 2011

Я ожидал, что приведенный ниже код приведет к идентичным элементам для List и List2 (у меня есть один проект cpp1 в пути поиска).

<ItemGroup>
    <src Include="cpp1"/>
    <List Include="@(src -> '..\..\..\projects\**\%(identity).vcxproj')" />
    <List2 Include="..\..\..\projects\**\cpp1.vcxproj" />
 </ItemGroup>

Но я получаю следующее:

List: ..\..\..\projects\**\cpp1.vcxproj
List2: ..\..\..\projects\common\cpp1\cpp1.vcxproj

Таким образом, похоже, что подстановочное выражение не раскрывается, когда оно является результатом преобразования.Что мне здесь не хватает?

1 Ответ

3 голосов
/ 30 июня 2011

Вы можете получить дополнительное преобразование, но вам нужно добавить дополнительный массив элементов, и для этого нужно, чтобы каждый потенциальный элемент добавлялся по одному за раз с зависимой целью.Вам также нужно передать спецификацию промежуточного элемента через свойство,

<ItemGroup>
   <src Include="cpp1"/>
   <List1a Include="@(src -> '..\..\..\projects\**\%(Identity).vcxproj')" />
   <List2 Include="..\..\..\projects\**\cpp1.vcxproj" />
</ItemGroup>

<Target Name="TransformWithWildcards"
   Outputs="%(List1a.Identity)">
   <PropertyGroup>
      <_ThisList1a>@(List1a)</_ThisList1a>
   </PropertyGroup>
   <ItemGroup>
      <List1b Include="$(_ThisList1a)" />
   </ItemGroup>
</Target>

<Target Name="Transform"
   DependsOnTargets="TransformWithWildcards">
   <Message Text="1a. %(List1a.Identity)" />
   <Message Text="1b. %(List1b.Identity)" />
   <Message Text="2. %(List2.Identity)" />
</Target>

@ (List1a) совпадает с исходным @ (List), а @ (List1b) содержит ожидаемые результаты после TransformWithWildcardsзавершается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...