gpt4 book ai didi

MSBuild - 子目录中所有 bin 目录的 ItemGroup

转载 作者:行者123 更新时间:2023-12-04 16:19:33 25 4
gpt4 key购买 nike

我的解决方案有多个项目(因此也有子目录),并且每个项目文件夹中有一个“bin”文件夹。

我正在尝试在包含所有这些目录的 MSBuild 脚本中创建一个 ItemGroup。

我认为这已经足够了,但它不包含任何内容:

<ItemGroup>
<BinDirs Include="**\bin" />
</ItemGroup>

我不确定为什么这不起作用。任何人都可以指出我正确的方向来实现我想要做的事情吗?

问候,
缺口

最佳答案

由于这还没有得到答案,因此在 Google 结果列表中名列前茅:

Alexey 提供的链接有几个解决这个问题的答案,但是你给出的例子为什么不起作用并不明显。

MSBuild ItemGroup 集合在定位目录时似乎不喜欢通配符转换。

您可以使用显式路径,例如

<ItemGroup>
<BinDirs Include="C:\MyProject\bin" />
</ItemGroup>

或相对于构建脚本运行位置的路径,例如
<ItemGroup>
<BinDirs Include="..\MyProject\bin" />
</ItemGroup>

但是,它不会转换您的通配符,除非您针对文件,例如
<ItemGroup>
<ThisWorks Include="..\**\bin\*" />
<ThisDoesnt Include="..\**\bin" />
</ItemGroup>

那篇文章包含几种使用通配符选择文件夹的方法,我倾向于使用的方法是:
<ItemGroup>
<GetAllFiles Include="..\**\bin\*.*" />
<GetFolders Include="@(GetAllFiles->'%(RootDir)%(Directory)'->Distinct())" />
</ItemGroup>

正如帖子中所述,选择根文件夹并不完美,因为它必须找到文件所在的位置。如果文件位于 bin 文件夹中,则使用 bin*.* 只会获取 bin 文件夹。

如果您的构建类似于标准 VS 输出,您可能会发现您的 bin 文件夹没有文件,而是具有基于您的配置名称的目录,例如bin\Debug,在这种情况下,定位 bin\**\* 将导致您的项目组包含这些文件夹。

例如。
<ItemGroup>
<GetAllFiles Include="..\**\bin\**\*" />
<GetFolders Include="@(GetAllFiles->'%(RootDir)%(Directory)'->Distinct())" />
</ItemGroup>

将得到:
  • ..\Proj1\bin\Debug
  • ..\Proj1\bin\Release
  • ..\Proj2\bin\Debug
  • ..\Proj2\bin\Release

  • 我不知道一种通配符方式来获取没有文件的 bin 文件夹......还没有。如果有人找到了,请张贴,因为它会很有用。

    希望这可以帮助某人节省一些时间。

    关于MSBuild - 子目录中所有 bin 目录的 ItemGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422892/

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