由于这个问题还没有答案,但在谷歌搜索结果中排名很高:
Alexey提供的链接有几个解决此问题的答案,但不清楚为什么你提供的示例不起作用。
当针对目录时,MSBuild ItemGroup集合似乎不喜欢通配符转换。
您可以使用明确的路径,例如:
<ItemGroup>
<BinDirs Include="C:\MyProject\bin" />
</ItemGroup>
或相对于您的构建脚本运行的路径,例如:
<ItemGroup>
<BinDirs Include="..\MyProject\bin" />
</ItemGroup>
然而,除非您的目标是文件,否则它不会转换通配符,例如:
However it does not transform your wildcards unless you are targeting files, e.g.
<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\**\*将导致您的项组包含这些文件夹。
例如:
<ItemGroup>
<GetAllFiles Include="..\**\bin\**\*" />
<GetFolders Include="@(GetAllFiles->'%(RootDir)%(Directory)'->Distinct())" />
</ItemGroup>
将会得到:
- ..\Proj1\bin\Debug
- ..\Proj1\bin\Release
- ..\Proj2\bin\Debug
- ..\Proj2\bin\Release
我不知道如何以通配符的方式获取没有文件的bin文件夹,如果有人找到了一种方法,请发布出来,因为这将非常有用。
希望这能帮助某些人节省时间。