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