Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
msbuild能否解析转换产生的通配符表达式?_Msbuild - Fatal编程技术网

msbuild能否解析转换产生的通配符表达式?

msbuild能否解析转换产生的通配符表达式?,msbuild,Msbuild,我希望下面的代码为List和List2生成相同的项(我在搜索路径中有一个cpp1项目) 因此,当通配符表达式是转换的结果时,它看起来没有被扩展。我错过了什么 您可以获得额外的转换,但是您需要添加一个额外的项数组,并且它需要一次添加一个具有依赖目标的每个潜在元素。您还需要通过属性传递中间项规范 <ItemGroup> <src Include="cpp1"/> <List1a Include="@(src -> '..\..\..\projects\

我希望下面的代码为List和List2生成相同的项(我在搜索路径中有一个cpp1项目)


因此,当通配符表达式是转换的结果时,它看起来没有被扩展。我错过了什么

您可以获得额外的转换,但是您需要添加一个额外的项数组,并且它需要一次添加一个具有依赖目标的每个潜在元素。您还需要通过属性传递中间项规范

<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>

@(列表1A)

@(列表1a)与原始@(列表)相同,@(列表1b)包含TransformWithWildcards完成后的预期结果。

再次感谢。我想如果不使用目标,就没有办法做到这一点?我希望visual studio加载此项目,并在不调用目标的情况下向我显示项列表的值。MSBuild中存在错误,如果使用通配符(或者可能只是递归**通配符),则路径不能以“.”开头。据我所知,您需要在目标中动态执行以克服错误。请注意,如果您将List1b移动到全局组,并将其定义为Include=“@(List1a)”,它将不起作用。Brian,您的回答是否也适用于OP的问题?在我看来,这里给出的解决方案更优雅。是的@user835103,这个答案显示了我在上面的评论中提到的动态执行。可能还需要做一些调整来绕过这个bug,注意在这个答案中路径不是以“.”开头的(我很确定这在Dev11中已经修复)
List: ..\..\..\projects\**\cpp1.vcxproj
List2: ..\..\..\projects\common\cpp1\cpp1.vcxproj
<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>