gpt4 book ai didi

msbuild - ItemGroup 包含有条件的文件

转载 作者:行者123 更新时间:2023-12-02 10:25:29 25 4
gpt4 key购买 nike

在 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在评估条件之前似乎没有初始化。

我确实找到了一种分两步完成的方法:

  1. 包含所有文件
  2. 删除不符合条件的文件
<ItemGroup>
<ProjectWithNuspec Include="*\*.csproj">
<ProjectWithNuspec Remove="%(ProjectWithNuspec.Identity)"
Condition="!Exists('@(ProjectWithNuspec->'%(Filename).nuspec')')">
</ItemGroup>

理想情况下,我希望能够一步完成此操作。

最佳答案

您基本上是在以 MSBuild 中可以表达的最佳方式执行此操作。对于这些类型的变换,您几乎总是需要一个中间项目组,您可以将附加变换分层到其中。把它想象成一个管道,首先你需要所有文件(这些文件进入组 1),现在我需要组 1 中的所有文件,这些文件也匹配一些其他条件(组 2)。

<ItemGroup>
<AllProjects Include="$(MyDir)\**\*.csproj" />
<AllProjectsWithNuspec Include="@(AllProjects)"
Condition="Exists('%(RecursiveDir)%(FileName).nuspec')" />

</ItemGroup>

关于msbuild - ItemGroup 包含有条件的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30153661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com