Msbuild ItemGroup包含具有条件的文件

Msbuild ItemGroup包含具有条件的文件,msbuild,Msbuild,在MSBuild 12.0中,仅当满足条件时,才能在中包含文件吗 我的用例是,我想创建一个所有.csproj文件的集合,其中存在一个同名的.nuspec文件(没有扩展名) -根目录\ -build.proj -项目1\ -Project1.csproj -项目1.nuspec -项目2\ -项目2.csproj -项目3\ -项目3.csproj -项目3.nuspec 我尝试用MSBuild转换来实现这一点,但没有成功 在评估条件之前,项ProjectWithNuspec似乎未初始化 我

在MSBuild 12.0中,仅当满足条件时,才能在
中包含文件吗

我的用例是,我想创建一个所有
.csproj
文件的集合,其中存在一个同名的
.nuspec
文件(没有扩展名)

-根目录\
-build.proj
-项目1\
-Project1.csproj
-项目1.nuspec
-项目2\
-项目2.csproj
-项目3\
-项目3.csproj
-项目3.nuspec
我尝试用MSBuild转换来实现这一点,但没有成功


在评估条件之前,项
ProjectWithNuspec
似乎未初始化

我确实想出了一个方法,分两步完成:

  • 包括所有文件
  • 删除不符合条件的文件
  • 
    

    理想情况下,我希望能够在一个步骤中完成这项工作。

    基本上,这是用MSBuild表达的最佳方式。对于这些类型的转换,您几乎总是需要一个中间项组,将其他转换分层到该中间项组。把它想象成一个管道,首先你需要所有文件(这些文件进入组1),现在我需要组1中的所有文件,这些文件也符合其他条件(组2)


    条件可以使用正则表达式。
    请参阅。

    您是在目标元素内还是在项目元素内?当您在目标元素中使用ItemGroup Remove…时,我假设一个目标元素。我忘记了
    %(RecursiveDir)
    <ItemGroup>
        <AllProjects Include="$(MyDir)\**\*.csproj" />        
        <AllProjectsWithNuspec Include="@(AllProjects)"
                               Condition="Exists('%(RecursiveDir)%(FileName).nuspec')"  />
    
    </ItemGroup>