MSBuild ItemGroup, excluindo diretórios e arquivos .svn dentro
-
09-06-2019 - |
Pergunta
Como posso construir um ItemGroup do MSBuild para excluir diretórios .svn e todos os arquivos dentro dele (recursivamente).Eu tenho:
<ItemGroup>
<LibraryFiles Include="$(LibrariesReleaseDir)\**\*.*" Exclude=".svn" />
</ItemGroup>
No momento, mas isso não exclui nada!
Solução
Obrigado pela ajuda, consegui classificar da seguinte forma:
<ItemGroup>
<LibraryFiles Include="$(LibrariesReleaseDir)\**\*.*"
Exclude="$(LibrariesReleaseDir)\**\.svn\**" />
</ItemGroup>
Acontece que a correspondência de padrões basicamente é executada em arquivos, então você deve excluir tudo ABAIXO do .svn
diretórios (.svn\\**
) para o MSBuild excluir o .svn
próprio diretório.
Outras dicas
Portanto, o problema é encadear variáveis por algum motivo no msbuild.O seguinte funciona para mim, observe que preciso usar apenas caminhos relativos com base na variável MSBuildProjectDirectory.
<CreateItem Include="$(MSBuildProjectDirectory)\..\Client\Web\Foo.Web.UI\**\*.*"
Exclude="$(MSBuildProjectDirectory)\..\Client\Web\Foo.Web.UI\**\.svn\**">
<Output TaskParameter="Include" ItemName="WebFiles" />
</CreateItem>
O seguinte não funciona:
<PropertyGroup>
<WebProjectDir>$(MSBuildProjectDirectory)\..\Client\Web\Foo.Web.UI</WebProjectDir>
</PropertyGroup>
<CreateItem Include="$(WebProjectDir)\**\*.*"
Exclude="$(WebProjectDir)\**\.svn\**">
<Output TaskParameter="Include" ItemName="WebFiles" />
</CreateItem>
Muito estranho!Passei cerca de 3 horas neste.
Aqui está uma maneira ainda melhor de fazer isso, verdadeiramente recursivamente.Não consigo fazer com que sua solução vá além de um nível de profundidade:
<LibraryFiles
Include="$(LibrariesReleaseDir)**\*.*"
Exclude="$(LibrariesReleaseDir)**\.svn\**\*.*"/>
Encontrei algumas falhas ao usar a abordagem Incluir/Excluir, então aqui está algo que funcionou para mim:
<ItemGroup>
<MyFiles Include=".\PathToYourStuff\**" />
<MyFiles Remove=".\PathToYourStuff\**\.svn\**" />
</ItemGroup>