从 MSBuild ItemGroup 中删除目录
Remove directory from MSBuild ItemGroup
我想为给定目录中的所有 bin
目录创建一个 ItemGroup,不包括给定子目录中的所有 bin
目录,例如:
MyDirectory\
bin\
ext\
bin\
lib\
lib1\
bin
samples\
sample1\
bin\
src\
bin\
我想删除 MyDirectory 中的所有 bin 目录,不包括 ext 和 lib 的所有 bin 目录(即删除 samples\sample1\bin 和 src\bin)。
这是我最初想出的:
<ItemGroup>
<ExcludedDirs Include="$(MyDirectory)\ext" />
<ExcludedDirs Include="$(MyDirectory)\lib" />
<BinDirs Include="$(MyDirectory)\**\bin" />
<BinDirs Remove="$(MyDirectory)\%(ExcludedDirs.Identity)\**" />
</ItemGroup>
由于 MSBuild - ItemGroup of all bin directories within subdirectories 这不起作用,这就是我想出以下内容的原因:
<ItemGroup>
<ExcludedDirs Include="$(MyDirectory)\ext" />
<ExcludedDirs Include="$(MyDirectory)\lib" />
<BinDirs Include="$([System.IO.Directory]::GetDirectories("$(SolutionDirectory)","bin", SearchOption.AllDirectories))" />
<BinDirs Remove="$(MyDirectory)\%(ExcludedDirs.Identity)\**" />
</ItemGroup>
现在所有的 bin 目录都在 BinDirs 中,但是,ext 和 lib 中的 bin 目录 不 被排除在外。有什么解决办法?
获得以下见解:
- ItemGroup 的删除无法在目录上使用通配符
- 有一个 Exclude 参数,但是它也不支持目录上的通配符
因此:首先创建一个排除目录的无通配符列表:
<ItemGroup>
<_ExcludedDirs Include="ext" />
<_ExcludedDirs Include="lib" />
<ExcludedDirs Include="$([System.IO.Directory]::GetDirectories("$(MyDirectory)\%(_ExcludedDirs.Identity)","bin", SearchOption.AllDirectories))"/>
</ItemGroup>
之后将其用作 ItemGroup 的 Exclude 参数的参数:
<BinDirs Include="$([System.IO.Directory]::GetDirectories("$(SolutionDirectory)","bin", SearchOption.AllDirectories))" Exclude="@(ExcludedDirs)" />
希望有人可以使用这个!
我想为给定目录中的所有 bin
目录创建一个 ItemGroup,不包括给定子目录中的所有 bin
目录,例如:
MyDirectory\
bin\
ext\
bin\
lib\
lib1\
bin
samples\
sample1\
bin\
src\
bin\
我想删除 MyDirectory 中的所有 bin 目录,不包括 ext 和 lib 的所有 bin 目录(即删除 samples\sample1\bin 和 src\bin)。
这是我最初想出的:
<ItemGroup>
<ExcludedDirs Include="$(MyDirectory)\ext" />
<ExcludedDirs Include="$(MyDirectory)\lib" />
<BinDirs Include="$(MyDirectory)\**\bin" />
<BinDirs Remove="$(MyDirectory)\%(ExcludedDirs.Identity)\**" />
</ItemGroup>
由于 MSBuild - ItemGroup of all bin directories within subdirectories 这不起作用,这就是我想出以下内容的原因:
<ItemGroup>
<ExcludedDirs Include="$(MyDirectory)\ext" />
<ExcludedDirs Include="$(MyDirectory)\lib" />
<BinDirs Include="$([System.IO.Directory]::GetDirectories("$(SolutionDirectory)","bin", SearchOption.AllDirectories))" />
<BinDirs Remove="$(MyDirectory)\%(ExcludedDirs.Identity)\**" />
</ItemGroup>
现在所有的 bin 目录都在 BinDirs 中,但是,ext 和 lib 中的 bin 目录 不 被排除在外。有什么解决办法?
获得以下见解:
- ItemGroup 的删除无法在目录上使用通配符
- 有一个 Exclude 参数,但是它也不支持目录上的通配符
因此:首先创建一个排除目录的无通配符列表:
<ItemGroup>
<_ExcludedDirs Include="ext" />
<_ExcludedDirs Include="lib" />
<ExcludedDirs Include="$([System.IO.Directory]::GetDirectories("$(MyDirectory)\%(_ExcludedDirs.Identity)","bin", SearchOption.AllDirectories))"/>
</ItemGroup>
之后将其用作 ItemGroup 的 Exclude 参数的参数:
<BinDirs Include="$([System.IO.Directory]::GetDirectories("$(SolutionDirectory)","bin", SearchOption.AllDirectories))" Exclude="@(ExcludedDirs)" />
希望有人可以使用这个!