MSBuild-子目录中所有bin目录的ItemGroup
我的解决方案有多个项目(因此还有子目录),每个项目文件夹中都有一个“bin”文件夹 我正在尝试在MSBuild脚本中创建一个包含所有这些目录的项目组 我认为这就足够了,但它不包含任何内容:MSBuild-子目录中所有bin目录的ItemGroup,msbuild,itemgroup,Msbuild,Itemgroup,我的解决方案有多个项目(因此还有子目录),每个项目文件夹中都有一个“bin”文件夹 我正在尝试在MSBuild脚本中创建一个包含所有这些目录的项目组 我认为这就足够了,但它不包含任何内容: <ItemGroup> <BinDirs Include="**\bin" /> </ItemGroup> 我不知道为什么这不起作用。有人能给我指出正确的方向来实现我的目标吗 问候,, 尼克因为这还没有答案,所以在谷歌搜索结果列表中排名靠前: Alexey提供的链
<ItemGroup>
<BinDirs Include="**\bin" />
</ItemGroup>
我不知道为什么这不起作用。有人能给我指出正确的方向来实现我的目标吗
问候,,
尼克因为这还没有答案,所以在谷歌搜索结果列表中排名靠前: 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**才能获取该文件夹
如果您的构建类似于标准VS输出,您可能会发现您的bin文件夹没有文件,而是具有基于您的配置名称的目录,例如bin\Debug,在这种情况下,以bin\***为目标将导致您的项目组包含这些文件夹
例如
将得到:
- ..\Proj1\bin\Debug
- ..\Proj1\bin\Release
- ..\Proj2\bin\Debug
- ..\Proj2\bin\Release
希望这有助于节省时间。在MSBuild 4.0中,这是可能的:
<Folders Include="$([System.IO.Directory]::GetDirectories(".","Bin", SearchOption.AllDirectories))" />
如果子文件夹为空,则检查此问题失败:(
<Folders Include="$([System.IO.Directory]::GetDirectories(".","Bin", SearchOption.AllDirectories))" />