在MSBuild 12.0中,我是否可以<ItemGroup>仅在条件满足时包含文件?
我的用例是我想创建一个所有.csproj文件的集合,其中.nuspec存在一个具有相同名称的文件(没有扩展名).
- root_dir\
- build.proj
- Project1\
- Project1.csproj
- Project1.nuspec
- Project2\
- Project2.csproj
- Project3\
- Project3.csproj
- Project3.nuspec
Run Code Online (Sandbox Code Playgroud)
我尝试用MSBuild转换来做这个,但那不起作用.
<ItemGroup>
<ProjectWithNuspec Include="*\*.csproj"
Condition="Exists('@(ProjectWithNuspec->'%(Filename).nuspec')')">
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
在ProjectWithNuspec评估条件之前,似乎没有初始化该项.
我确实想办法分两步完成:
<ItemGroup>
<ProjectWithNuspec Include="*\*.csproj">
<ProjectWithNuspec Remove="%(ProjectWithNuspec.Identity)"
Condition="!Exists('@(ProjectWithNuspec->'%(Filename).nuspec')')">
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望能够一步到位.
您基本上这样做是可以在MSBuild中表达的最佳方式.对于这些类型的变换,您几乎总是需要一个中间项组,您可以将其他变换分层.把它想象成一个管道,首先你需要所有文件(这些都进入组1),现在我需要组1中的所有文件,这些文件也匹配其他条件(组2).
<ItemGroup>
<AllProjects Include="$(MyDir)\**\*.csproj" />
<AllProjectsWithNuspec Include="@(AllProjects)"
Condition="Exists('%(RecursiveDir)%(FileName).nuspec')" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2870 次 |
| 最近记录: |