一个任务ItemGroup可以是glob文件吗?

时间:2018-02-19 14:13:15

标签: msbuild

我的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被弃用的观点,这让我不知道替代方案是什么。

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用中间属性,以便使用实际文本而不是转义的转换项:

<PropertyGroup>
  <_CustomProjectReferenceFileIncludes>@(MyCustomProjectType->'%(Identity)\%(Name)\**\*')</_CustomProjectReferenceFileIncludes>
</PropertyGroup>
<ItemGroup>
    <CustomProjectReferenceFiles
        KeepMetadata="Name"
        Include="$(_CustomProjectReferenceFileIncludes)"
        Exclude="**\*.x;**\*.y"
    />
</ItemGroup>