我的ItemGroup
声明如下:
<ItemGroup>
<MyCustomProjectType Include="..\path_to_my_project">
<Name>MyProjectName</Name>
</MyCustomProjectType>
</ItemGroup>
这是我想要执行某些特定操作的自定义项目类型。
后来我有一个Target
(仅限示例,但它传达了我所追求的内容):
<Target Name="MyTarget">
<ItemGroup>
<CustomProjectReferenceFiles
KeepMetadata="Name"
Include="@(MyCustomProjectType->'%(Identity)\%(Name)\**\*')"
Exclude="**\*.x;**\*.y"
/>
</ItemGroup>
<Message Text="@(CustomProjectReferenceFiles)" />
</Target>
所以我有一个基于Target的ItemGroup,我正在尝试使用转换来创建一个新的Include。这确实有效,但似乎Include
字面上设置为:
..\path_to_my_project\MyProjectName\**\*
全球/通配符不扩展的AKA。
我对MSBuild很新,所以也许我在搜索文档时遗漏了一些东西。我在这里想到的一个解决方案就是创建一个新的自定义任务,处理拉出我需要的文件并在中间目标上设置输出。
我也发现了这个问题: https://stackoverflow.com/a/3398872/1060314
这提出了关于CreateItem
被弃用的观点,这让我不知道替代方案是什么。
答案 0 :(得分:0)
最简单的方法是使用中间属性,以便使用实际文本而不是转义的转换项:
<PropertyGroup>
<_CustomProjectReferenceFileIncludes>@(MyCustomProjectType->'%(Identity)\%(Name)\**\*')</_CustomProjectReferenceFileIncludes>
</PropertyGroup>
<ItemGroup>
<CustomProjectReferenceFiles
KeepMetadata="Name"
Include="$(_CustomProjectReferenceFileIncludes)"
Exclude="**\*.x;**\*.y"
/>
</ItemGroup>