Trabalho com vários projetos e quero excluir recursivamente todas as pastas com o nome 'bin' ou 'obj' dessa maneira. Tenho certeza de que todos os projetos reconstruirão tudo (às vezes, é a única maneira de forçar o Visual Studio a esquecer tudo sobre o anterior. cria).
Existe uma maneira rápida de fazer isso (com um arquivo .bat por exemplo) sem precisar escrever um programa .NET?
visual-studio
visual-studio-2008
batch-file
cmd
MichaelD
fonte
fonte
Respostas:
Isso depende do shell que você preferir usar.
Se você estiver usando o cmd shell no Windows, o seguinte deverá funcionar:
Se você estiver usando um shell do tipo bash ou zsh (como git bash ou babun no Windows ou na maioria dos shells Linux / OS X), esta é uma maneira muito mais agradável e sucinta de fazer o que você deseja:
e isso pode ser reduzido a uma linha com um OR:
Observe que, se seus diretórios de nomes de arquivos contiverem espaços ou aspas, o find enviará essas entradas como estão, que xargs podem dividir em várias entradas. Se o seu shell os suportar,
-print0
e-0
contornar essa falha, os exemplos acima se tornarão:e:
Se você estiver usando o Powershell, poderá usar o seguinte:
como visto na resposta de Robert H abaixo - apenas certifique-se de dar crédito a ele pela resposta do PowerShell, e não por mim, se você escolher votar novamente qualquer coisa :)
É claro que seria sensato executar qualquer comando que você escolher em algum lugar seguro primeiro para testá-lo!
fonte
Encontrei este tópico e peguei bingo. Um pouco mais de pesquisa mostrou esse script do shell de energia:
Pensei em compartilhar, considerando que não encontrei a resposta quando estava procurando aqui.
fonte
gci -include bin,obj -recurse | remove-item -force -recurse
)-WhatIf
bandeira para primeiro teste, então eu acabei com isso:$foldersToRemove='bin','obj';[string[]]$foldersToIgnore='ThirdParty';Get-ChildItem .\ -Include $foldersToRemove -Recurse|Where-Object{$_.FullName -inotmatch "\\$($foldersToIgnore -join '|')\\"}|Remove-Item -Force -Recurse -WhatIf
(um pouco confuso aqui como uma linha embora :))Isso funcionou para mim:
Com base nesta resposta em superuser.com
fonte
Costumo adicionar sempre um novo alvo em minhas soluções para conseguir isso.
E você pode chamá-lo na linha de comando
Este pode ser o seu arquivo em lotes.
fonte
Eu escrevi um script do PowerShell para fazer isso.
A vantagem é que ela imprime um resumo das pastas excluídas e as ignoradas, se você especificou qualquer hierarquia de subpastas a ser ignorada.
fonte
$_ -notmatch 'node_modules'
condições para$FoldersToRemove
definição de variávelNada funcionou para mim. Eu precisava excluir todos os arquivos nas pastas bin e obj para depuração e lançamento. Minha solução:
1.Clique com o botão direito do mouse no projeto, descarregue, clique com o botão direito novamente em editar, vá para o final
2.Inserir
3. Salve, recarregue o projeto, clique com o botão direito do mouse em limpo e pronto.
fonte
Algo assim deve fazê-lo de uma maneira bastante elegante, após um objetivo limpo:
fonte
Para excluir bin e obj antes da compilação, adicione ao arquivo do projeto:
Aqui está o artigo: Como remover a pasta bin e / ou obj antes da compilação ou implantação
fonte
Muito semelhante aos scripts do Steve PowerShell. Acabei de adicionar TestResults e pacotes a ele, pois é necessário para a maioria dos projetos.
fonte
Dê uma olhada no CleanProject , ele excluirá pastas bin, pastas obj, pastas TestResults e pastas Resharper. O código fonte também está disponível.
fonte
de Usando o Windows PowerShell para remover pastas obj, bin e ReSharper
muito semelhante à resposta de Robert H com sintaxe mais curta
cole e execute o script abaixo
dir. \ -include bin, obj, resharper * -recurse | foreach ($ ) {rd $ _. fullname –Recurse –Force}
fonte
Uma maneira muito rápida e simples é usar o
rimraf
utilitário npm, instalá-lo globalmente primeiro:E então o comando da raiz do projeto é bastante simples (que pode ser salvo em um arquivo de script):
Para otimizar o efeito desejado, você pode alavancar os destinos de eventos do projeto (aquele que você pode usar
BeforeRebuild
e executar o comando anterior) especificados nos documentos: https://docs.microsoft.com/en-us/visualstudio/ msbuild / como estender o processo de criação do estúdio visual? view = vs-2017Eu gosto do utilitário rimraf, pois é multiplataforma e muito rápido. Mas também é possível usar o
RemoveDir
comando no .csproj se você decidir ir com a opção de evento de destino. ARemoveDir
abordagem foi bem explicada em outra resposta aqui por @ Shaman: https://stackoverflow.com/a/22306653/1534753fonte
Aqui está a resposta eu dei a uma pergunta semelhante: Simples, fácil, funciona muito bem e não requer nada além do que você já tem com o Visual Studio.
Como outros já responderam, o Clean removerá todos os artefatos gerados pela construção. Mas isso deixará para trás todo o resto.
Se você tiver algumas personalizações no seu projeto MSBuild, isso pode significar problemas e deixar para trás coisas que você acha que deveria ter excluído.
Você pode contornar esse problema com uma simples alteração no seu. * Proj adicionando-o em algum lugar próximo ao final:
O que removerá tudo da sua pasta bin da plataforma / configuração atual.
fonte
Este é o meu arquivo em lotes que eu uso para excluir todas as pastas BIN e OBJ recursivamente.
fonte
'Limpo' não é bom o suficiente? Observe que você pode chamar o msbuild com / t: clean na linha de comando.
fonte
Em nosso servidor de compilação, excluímos explicitamente os diretórios bin e obj, por meio de scripts nant.
Cada script de construção do projeto é responsável por seus diretórios de saída / temp. Funciona bem dessa maneira. Portanto, quando alteramos um projeto e adicionamos um novo, baseamos o script em um script de trabalho, e você percebe o estágio de exclusão e cuida dele.
Se você fizer isso em sua máquina de desenvolvimento lógico, eu ficaria limpo através do Visual Studio, como outros já mencionaram.
fonte
Na verdade, eu odeio arquivos obj espalhando as árvores de origem. Eu costumo configurar projetos para que eles produzam arquivos obj fora da árvore de origem. Para projetos em C # eu costumo usar
Para projetos C ++
fonte
http://vsclean.codeplex.com/
fonte
Você pode levar a sugestão do PS um pouco mais longe e criar um arquivo vbs no diretório do projeto, assim:
Por segurança, incluí o parâmetro -WhatIf; remova-o se estiver satisfeito com a lista na primeira execução.
fonte
Eu uso uma ligeira modificação de Robert H, que pula erros e imprime os arquivos de exclusão. I usally também limpar as
.vs
,_resharper
epackage
pastas:Também vale a pena notar o
git
comando que limpa todas as alterações, inclusive arquivos e diretórios ignorados:fonte
Temos um grande arquivo .SLN com muitos arquivos de projeto. Comecei a política de ter um diretório "ViewLocal" onde estão localizados todos os arquivos não controlados por código fonte. Dentro desse diretório, há um diretório 'Inter' e um 'Out'. Para os arquivos intermediários e os arquivos de saída, respectivamente.
Obviamente, isso facilita o acesso ao diretório 'viewlocal' e a exclusão simples de tudo.
Antes de dedicar algum tempo a descobrir uma maneira de solucionar isso com scripts, você pode pensar em configurar algo semelhante.
Não vou mentir, porém, manter essa configuração em uma grande organização provou ser ... interessante. Especialmente quando você usa tecnologias como QT que gostam de processar arquivos e criar arquivos de origem não controlados por fontes. Mas isso é outra história!
fonte
Considerando que o arquivo PS1 está presente na currentFolder (a pasta na qual você precisa excluir as pastas bin e obj)
fonte
Para a solução em lote. Estou usando o seguinte comando:
FOR /D /R %%G in (obj,bin) DO @IF EXIST %%G IF %%~aG geq d RMDIR /S /Q "%%G"
O motivo de não usar
DIR /S /AD /B xxx
1.
DIR /S /AD /B obj
retornará uma lista vazia (pelo menos no meu Windows 10) 2. conterá o resultado que não é esperado (pasta tobj)DIR /S /AD /B *obj
fonte
@IF EXIST %%G IF %%~aG geq d
é usado para verificar o caminho existente e o caminho é uma pasta, não um arquivo.Isso funciona bem para mim: inicie para / d / r. %% d (bin, obj, ClientBin, Generated_Code) existe @se existir "%% d" rd / s / q "%% d"
fonte
Eu uso o arquivo .bat com essa vírgula para fazer isso.
fonte
Eu acho que você pode clicar com o botão direito do mouse na sua solução / projeto e clicar no botão "Limpar".
Tanto quanto me lembro, estava funcionando assim. Eu não tenho meu VS.NET comigo agora, então não posso testá-lo.
fonte