Diferença entre Build Solution, Rebuild Solution e Clean Solution no Visual Studio?

Respostas:

921
  • A solução Build realizará uma construção incremental: se não achar que precisa reconstruir um projeto, não será. Ele também pode usar bits do projeto parcialmente construídos se eles não foram alterados (não sei até que ponto isso leva)
  • A solução de reconstrução será limpa e a partir do zero, ignorando tudo o que foi feito antes. A diferença entre isso e "Limpar, seguido de Compilação" é que o Rebuild irá limpar e compilar cada projeto, um de cada vez, em vez de limpar tudo e depois compilar tudo.
  • A solução limpa removerá os artefatos de compilação da compilação anterior. Se houver outros arquivos nos diretórios de destino da construção (bin e obj), eles não poderão ser removidos, mas os artefatos de construção reais serão. Já vi o comportamento disso variar - algumas vezes excluindo completamente e outras vezes não - mas darei ao VS o benefício da dúvida no momento :)

(Os links são para as opções de linha de comando devenv.exe , mas fazem o mesmo que os itens de menu.)

Jon Skeet
fonte
2
@ womp: Não no projeto que acabei de ver. Ele ainda tem todas as igrejas lá ...
Jon Skeet
1
@ Jon - estranho. Não me lembro de uma limpeza sempre não limpar esses diretórios. Estou fazendo isso agora e está limpando todos os arquivos .dll e .pdb. Definitivamente deixa meu ReSharper lixo sozinho.
womp
156
Eu pessoalmente achei "Solução Limpa" mais do que inútil. Se eu realmente quiser limpar, excluir manualmente as pastas bin e obj é o caminho a percorrer. Até foram pegos perseguindo "erros" fantasmas - até eu fazer isso. Limpo simplesmente não é confiável.
Chris Rogers
7
se os artefatos fizeram o seu caminho por outros meios que não os artefatos de construção (digamos, por exemplo, uma cópia de outra fonte integrada como uma msbuidltask no cproj), então os deixa limpos. O que o torna praticamente inútil, diria até que é perigoso, pois deixará você com uma falsa sensação de limpeza.
Newtopian 30/08/2012
4
@verdana: Para o github etc, é mais simples ter um .gitignorearquivo decente . Mas, de acordo com a resposta, o Clean nem sempre faz um trabalho particularmente completo em minha experiência.
Jon Skeet
455

Solução de compilação: Compila arquivos de código (DLL e EXE) que são alterados.

Reconstruir: Exclui todos os arquivos compilados e os compila novamente, independentemente se o código foi alterado ou não.

Solução limpa: exclui todos os arquivos compilados (arquivo DLL e EXE).

Você pode ver este vídeo do YouTube ( Visual Studio Build vs. Rebuild vs. Clean (perguntas da entrevista em C # com respostas) ) onde demonstrei as diferenças e abaixo estão representações visuais que ajudarão você a analisar o mesmo com mais detalhes.

Build vs Rebuild

A diferença entre Rebuild vs. (Clean + Build), porque parece haver alguma confusão em torno disso:

A diferença é a maneira como a sequência de compilação e limpeza acontece para cada projeto. Digamos que sua solução tenha dois projetos, "proj1" e "proj2". Se você fizer uma reconstrução, será necessário "proj1", limpe (exclua) os arquivos compilados para "proj1" e construa-o. Depois disso, será necessário o segundo projeto "proj2", limpe os arquivos compilados para "proj2" e compile "proj2".

Mas se você fizer um “clean” e construir ”, ele primeiro excluirá todos os arquivos compilados para“ proj1 ”e“ proj2 ”e, em seguida, criará“ proj1 ”primeiro seguido por“ proj2 ”.

Reconstruir Vs Limpo

Shivprasad Koirala
fonte
26
Obrigado por explicar por que o Rebuild nem sempre funciona e geralmente preciso limpar antes de fazer uma compilação.
Didier A.
4
Sim, a descrição e o segundo diagrama foram muito úteis e claros. Se você pudesse consertar o fluxograma "ilegal", para que o Yes fosse apenas para um lugar, isso ajudaria. Eu realmente não consigo entender o que aquele está tentando dizer, especialmente com "Build ALL" em "Rebuild".
Jon Coombs
@ JonCoombs Sim, acho que o primeiro fluxograma não capturou exatamente o que ele disse no vídeo. Acho que a imagem que inseri é o que Shivprasad estava buscando.
Ruffin
Pelo que entendi, se algum arquivo foi alterado, o projeto é limpo regularmente, o que significa que ele não fará nada ou será limpo e, em seguida, criará o projeto. Isso está correto?
Clearer
147

Retirado deste link :

Compilar significa compilar e vincular apenas os arquivos de origem que foram alterados desde a última compilação, enquanto Reconstruir significa compilar e vincular todos os arquivos de origem, independentemente de terem sido alterados ou não. Construir é a coisa normal a se fazer e é mais rápido. Às vezes, as versões dos componentes de destino do projeto podem ficar fora de sincronia e a reconstrução é necessária para tornar a construção bem-sucedida. Na prática, você nunca precisa limpar.

Matthew Jones
fonte
1
Ligação? Eu pensei que a idéia de uma DLL, também conhecida como Dynamic Link Library, fosse vincular em tempo de execução?
The Dag
7
"Na prática, você nunca precisa limpar" <- eu chamo de BS nesse caso.
piers7
2
piers7, você pode fornecer um motivo pelo qual precisaria limpar ou reconstruir?
PaulBinder
1
@PaulBinder Você não precisa ir muito longe.
6307 JakeD em
46

Solução de Compilação - Cria todos os assemblies que alteraram arquivos. Se uma montagem não tiver alterações, ela não será reconstruída. Também não excluirá nenhum arquivo intermediário.

Usado com mais frequência.

Reconstruir solução - reconstrói todos os assemblies, independentemente das alterações, mas deixa os arquivos intermediários.

Usado quando você percebe que o Visual Studio não incorporou suas alterações no assembly mais recente. Às vezes, o Visual Studio comete erros.

Solução limpa - exclua todos os arquivos intermediários.

Usado quando tudo mais falha e você precisa limpar tudo e começar do zero.

Justin Niessner
fonte
25
Limpar não faz uma compilação.
Jon Skeet
3
@ Jon Skeet - Aprenda algo novo todos os dias. Eu teria jurado que ele foi reconstruído. Acho que minha memória nem sempre é tão confiável quanto eu gostaria.
Justin Niessner
16

Eu apenas penso em Rebuild como executando o Clean primeiro, seguido pelo Build. Talvez eu esteja errado ... comentários?

Ken Richards
fonte
Isso não teve votos positivos (até agora) e, de acordo com os documentos (veja o link na resposta de Jon), isso é exatamente correto.
Tod
2
Eu acho que não. Tenho uma situação em que a solução limpa, seguida pela solução de compilação, funciona, mas a solução de reconstrução falha. Esta é uma solução criada recentemente com 2 projetos (um dependente do outro).
Cthutu
@Cthutu Veja a resposta de Shivprasad para os detalhes que fazem a diferença aqui. Reconstruir limpa e, em seguida, cria cada projeto individual de cada vez, enquanto executar o Clean primeiro limpa tudo de uma só vez, depois o Build cria tudo de uma só vez. Corri em instâncias em que essa alteração na ordem de limpeza / compilação também faz a diferença entre compilar e não compilar.
21313 Sean
@Sean Talvez tenha sido causado pela adição de um projeto em sua solução como um em file referencevez de um, project referencepara que a ordem de criação do projeto não reconhecesse que era necessário criar um determinado projeto antes de outro, e a montagem não existia onde deveria estar durante o processo. Construir?
Zack
14

Solução de Compilação - Cria todos os assemblies que alteraram os arquivos. Se uma montagem não tiver alterações, ela não será reconstruída. Também não excluirá nenhum arquivo intermediário.

A solução de reconstrução será limpa e depois a partir do zero, ignorando tudo o que foi feito antes

O Clean Solution excluirá todos os arquivos compilados (ex. EXE e DLL) do diretório bin / obj.

Guilherme Fidelis
fonte
8

A solução Build compilará todos os projetos na solução que foram alterados. A reconstrução cria todos os projetos, não importa como, a solução limpa remove todos os arquivos temporários, garantindo que a próxima construção seja concluída.

Steven Evers
fonte
6

Solução de compilação - A solução de compilação criará seu aplicativo com a criação do número de projetos que estão tendo qualquer alteração no arquivo. E não limpa nenhum arquivo binário existente e apenas substitui os assemblies atualizados na pasta bin ou obj.

Solução de reconstrução - A solução de reconstrução criará todo o seu aplicativo criando todos os projetos disponíveis na sua solução, limpando-os. Antes de compilar, ele limpa todos os arquivos binários da pasta bin e obj.

Solução limpa - A solução limpa é apenas limpa todos os arquivos binários da pasta bin e obj.

Sabaridass R
fonte
5

Solução de compilação

Isso executará uma construção incremental. Em outras palavras, ele criará apenas arquivos de código que foram alterados. Se eles não foram alterados, esses arquivos não serão tocados.

Reconstruir solução

Isso excluirá todos os arquivos compilados atualmente (exe e DLLs) e criará tudo do zero, independentemente de haver ou não alteração de código no arquivo.

Menu solução limpa

Este menu excluirá todos os arquivos compilados (ex. EXE e DLL) do diretório bin / obj.

Reconstruir = Limpar + Criar

Sajisha
fonte
4

A principal coisa que acho que as pessoas estão deixando de fora é que Build e Clean são tarefas executadas com base no conhecimento do Visual Studio sobre seu projeto / solução. Vejo muitas reclamações de que o Clean não funciona, deixa arquivos restantes ou não é confiável; quando, na verdade, os motivos pelos quais você diz que não é confiável na verdade o tornam mais confiável.

A limpeza removerá apenas arquivos e / ou diretórios (limpos) criados pelo Visual Studio ou pelo compilador. Se você copiar seus próprios arquivos ou as estruturas de arquivos / pastas forem criadas a partir de uma ferramenta ou fonte externa, o Visual Studio não "sabe que elas existem" e, portanto, não deve tocá-las.

Você pode imaginar se a operação de limpeza executou basicamente um "del *. *"? Isso pode ser catastrófico.

O Build executa uma compilação em projetos alterados ou necessários.

A reconstrução executa uma compilação independentemente da alteração ou do que é necessário.

O Clean remove os arquivos / pastas que ele criou no passado, mas deixa inicialmente tudo o que não tinha nada a ver.

Espero que isso elabore um pouco e ajude.

correr atrás
fonte
4

Eu tenho aa solução em branco BuildRebuildCleane três biblioteca de classes Models, Repository, Notification.

Eu uso Modelse Repositoryna Notificationbiblioteca de classes.

Então:

  • Solução de compilação Compilação incremental e compila apenas os arquivos que foram alterados. Se uma montagem não tiver alterações, ela não será reconstruída. Além disso, ele não excluirá nenhum arquivo intermediário. Se Modificar algum código no Modelsprojeto da biblioteca, em seguida, BUILD solution. Na captura de tela abaixo, consulte o carimbo de data / hora da DLL, EXE é atualizado Modelse a Notificationbiblioteca.

insira a descrição da imagem aqui

  • Solução de reconstrução Exclui todos os arquivos compilados e compila todos, independentemente das alterações, ignorando tudo o que foi feito antes. Clique com o botão direito do mouse no nome da solução BuildRebuildClean. O que ele faz é excluir todos os assemblies, EXEs e arquivos referidos para compilar novamente.

insira a descrição da imagem aqui

  • Solução limpa Exclui todos os arquivos intermediários compilados (por exemplo, EXEs e DLLs) do diretório bin / obj.

insira a descrição da imagem aqui

Reza Jenabi
fonte
2

Tudo o que sei é que o Clean não faz o que o "make clean" costumava fazer - se eu limpar uma solução, esperaria que ele excluísse obj / bin arquivos / pastas, de forma que construa como se fosse um novo checkout da fonte. De acordo com minha experiência, muitas vezes encontro momentos em que um Clean and Build ou Rebuild ainda produz erros estranhos na origem que são conhecidos por compilar e o que é necessário é uma exclusão manual das pastas bin / obj e, em seguida, ele cria.

Steve
fonte
Especialmente em projetos Xamarin eu preciso eliminar bin manualmente e obj pastas para resolver erros de compilação estranhos
Miguel Febres
0

Trata-se apenas da opção "Build Solution".

Fiquei totalmente farto da incapacidade do Visual Studio de realmente limpar soluções e escrevi essa pequena ferramenta que fará isso por você.

Feche sua solução no VS primeiro e arraste a pasta do Windows Explorer para este aplicativo ou para o ícone. Dependendo da configuração na parte inferior da janela, ele também pode remover itens adicionais, o que ajudará se você tentar carregar manualmente sua solução no GitHub ou compartilhá-la com outra pessoa:

insira a descrição da imagem aqui

Em poucas palavras, ele colocará todas as pastas "Debug", Intellisense e outros caches que podem ser reconstruídos pelo VS na Lixeira para você.

ahmd0
fonte