【发布时间】:2015-07-21 03:07:59
【问题描述】:
在 MSBuild 12.0 中,我能否仅在满足条件时将文件包含在 <ItemGroup> 中?
我的用例是我想创建一个包含所有 .csproj 文件的集合,其中存在同名的 .nuspec 文件(没有扩展名)。
- root_dir\
- build.proj
- Project1\
- Project1.csproj
- Project1.nuspec
- Project2\
- Project2.csproj
- Project3\
- Project3.csproj
- Project3.nuspec
我尝试使用 MSBuild 转换来执行此操作,但没有成功。
<ItemGroup>
<ProjectWithNuspec Include="*\*.csproj"
Condition="Exists('@(ProjectWithNuspec->'%(Filename).nuspec')')">
</ItemGroup>
项目ProjectWithNuspec 在条件评估之前似乎没有被初始化。
我确实想出了一个分两步完成的方法:
- 包括所有文件
- 删除不符合条件的文件
<ItemGroup>
<ProjectWithNuspec Include="*\*.csproj">
<ProjectWithNuspec Remove="%(ProjectWithNuspec.Identity)"
Condition="!Exists('@(ProjectWithNuspec->'%(Filename).nuspec')')">
</ItemGroup>
理想情况下,我希望能够一步完成。
【问题讨论】:
-
您是在 Target 元素内还是在 Project 元素内?当您使用 ItemGroup Remove... 时,我假设一个 Target 元素...
-
在目标元素内。
标签: msbuild