我的解决方案有多个项目(以及子目录),每个项目文件夹中都有一个"bin"文件夹.
我正在尝试在MSBuild脚本中创建一个包含所有这些目录的ItemGroup.
我认为这就足够了,但它不包含任何东西:
<ItemGroup>
<BinDirs Include="**\bin" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我不确定为什么这不起作用.任何人都可以指出我正确的方向来实现我想要做的事情吗?
问候,尼克
小智 16
由于这还没有得到答案,但在Google搜索结果列表中名列前茅:
Alexey提供的链接有几个答案可以解决这个问题,但是为什么你给出的例子不起作用并不明显.
在定位目录时,MSBuild ItemGroup集合似乎不喜欢通配符转换.
您可以使用显式路径,例如
<ItemGroup>
<BinDirs Include="C:\MyProject\bin" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
或者相对于构建脚本运行位置的路径,例如
<ItemGroup>
<BinDirs Include="..\MyProject\bin" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
但是,除非您定位文件,否则它不会转换您的通配符,例如
<ItemGroup>
<ThisWorks Include="..\**\bin\*" />
<ThisDoesnt Include="..\**\bin" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
该帖子包含几种使用通配符选择文件夹的方法,我倾向于使用它:
<ItemGroup>
<GetAllFiles Include="..\**\bin\*.*" />
<GetFolders Include="@(GetAllFiles->'%(RootDir)%(Directory)'->Distinct())" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
如帖子所述,它在选择根文件夹方面并不完美,因为它必须找到有文件的位置.使用bin*.*只会在文件位于bin文件夹中时获取bin文件夹.
如果您的构建类似于标准VS输出,您可能会发现您的bin文件夹没有文件,而是根据您的配置名称具有目录,例如bin\Debug,在这种情况下,目标bin\**\*将导致您的包含这些文件夹的项目组.
例如
<ItemGroup>
<GetAllFiles Include="..\**\bin\**\*" />
<GetFolders Include="@(GetAllFiles->'%(RootDir)%(Directory)'->Distinct())" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
将得到:
我不知道有一种通配符方式来获取没有文件的bin文件夹...... 如果有人找到,请发布,因为它会有用.
希望这可以帮助别人节省一些时间.
在MSBuild 4.0中,这是可能的:
<Folders Include="$([System.IO.Directory]::GetDirectories(".","Bin", SearchOption.AllDirectories))" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6540 次 |
| 最近记录: |