Diferença entre reconstruir e limpar + compilar no Visual Studio

Qual é a diferença entre apenas um Reconstruir e fazer um Clean + Build no Visual Studio 2008? O Clean + Build é diferente do Clean + Reconstruir ?

Reconstruir = Limpar + Construir

Detalhes notáveis:

  1. Para uma solução com vários projetos, “rebuild solution” faz um “clean” seguido por um “build” para cada projeto (possivelmente em paralelo). Considerando que uma “solução limpa” seguida de uma “solução de compilation” primeiro limpa todos os projetos (possivelmente em paralelo) e, em seguida, constrói todos os projetos (possivelmente em paralelo). Essa diferença no sequenciamento de events pode se tornar significativa quando as dependencies entre projetos entram em ação.

  2. Todas as três ações correspondem aos destinos do MSBuild. Portanto, um projeto pode replace a ação Reconstruir para fazer algo completamente diferente.

Earl está correto em 99% do tempo Reconstruir = Limpar + Construir.

Mas eles não são garantidos para ser o mesmo. As 3 ações (reconstruir, construir, limpar) representam diferentes destinos do MSBuild. Cada um dos quais pode ser substituído por qualquer arquivo de projeto para executar ações personalizadas. Portanto, é totalmente possível que alguém substitua a reconstrução para executar várias ações antes de iniciar uma compilation + limpa (ou removê-las completamente).

Muito um caso de canto, mas apontando para fora devido a discussões de comentários.

1 Por projeto, Rebuild project = (projeto limpo + projeto de compilation).

2 Por Solução, Rebuild Sln = projeto foreach (projeto limpo + projeto de construção)! = Clean Sln + Build Sln

Digamos que você tenha um Sln, contém proj1, proj2 e proj3.

Reconstruir Sln = (Limpar proj1 -> Construir Proj1) + (Limpar proj2 -> Construir Proj2) + (Limpar proj3 -> Construir Proj3)

Limpar Sln + Construir Sln = (Limpar proj1 + Limpar proj2 + Limpar proj3) -> (Construir proj1 + Construir proj2 + Construir proj3)

-> significa serial, + significa concorrente

Portanto, há uma chance quando você envia muitas alterações de código enquanto não configura as dependencies do projeto corretamente, Rebuild Sln faria com que alguns de vocês projetassem um link para um lib obsoleto porque todas as compilações não são garantidas depois de todas as limpezas. Nesse caso, Clean Sln + Build Sln fornecerá um erro de link e informará isso imediatamente, em vez de fornecer um aplicativo com um comportamento estranho)

De http://www.cs.tufts.edu/r/graphics/resources/vs_getting_started/vs_getting_started.htm , (apenas pesquisei no Google):

Build significa compilar e vincular apenas os arquivos de origem que foram alterados desde a última compilation, enquanto Reconstruir significa compilar e vincular todos os arquivos de origem, independentemente de terem sido alterados ou não. Construir é a coisa normal para 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.

Build or Rebuild Solution cria ou recria todos os projetos na sua solução, enquanto Build ou Rebuild cria ou recria o projeto StartUp, “hello” na canvas acima. Para definir o projeto StartUp, clique com o botão direito do mouse no nome do projeto desejado na guia Solution Explorer e selecione Set as StartUp project. O nome do projeto agora aparece em negrito. Como as soluções de trabalhos de casa normalmente têm apenas um projeto, Build ou Rebuild Solution é efetivamente o mesmo que Build ou Rebuild.

A compilation apenas compila o arquivo de origem atualmente sendo editado. Útil para verificar rapidamente os erros quando o restante dos arquivos de origem está em um estado incompleto que impediria uma compilation bem-sucedida do projeto inteiro. Ctrl-F7 é a tecla de atalho para compilar.

A partir desta postagem do blog que o autor vinculou como um comentário a essa pergunta :

Na verdade não!!! eles não são iguais.

A diferença está na sequência dos projetos ficarem limpos e construídos. Vamos dizer que temos dois projetos em uma solução. Limpar e, em seguida, compilar executará limpeza em ambos os projetos e, em seguida, a compilation ocorrerá individualmente enquanto no projeto de reconstrução A será obtido e limpo e, em seguida, compilado após o projeto B ser limpo e, em seguida, compilado e assim por diante.