Respostas:
A obj
pasta contém arquivos objeto, ou intermediários, que são arquivos binários compilados que ainda não foram vinculados. São essencialmente fragmentos que serão combinados para produzir o executável final. O compilador gera um arquivo de objeto para cada arquivo de origem e esses arquivos são colocados na obj
pasta.
A bin
pasta contém arquivos binários , que são o código executável real do seu aplicativo ou biblioteca.
Cada uma dessas pastas é subdividida em pastas Debug
e Release
, que simplesmente correspondem às configurações de compilação do projeto. Os dois tipos de arquivos discutidos acima são colocados na pasta apropriada, dependendo do tipo de construção que você executa. Isso facilita a determinação de quais executáveis são criados com símbolos de depuração e quais foram criados com otimizações ativadas e prontas para lançamento.
Observe que você pode alterar onde o Visual Studio gera seus arquivos executáveis durante uma compilação nas propriedades do seu projeto. Você também pode alterar os nomes e as opções selecionadas para suas configurações de construção.
obj
realmente só contêm unlinked arquivos de código-objeto? Da minha experiência, ele contém todos eles, e na etapa de compilação final, os arquivos que fazem parte do "jogo final" são copiados para bin
.
Gostaria de encorajá-lo a ver este vídeo do youtube que demonstra a diferença entre as pastas bin C # e obj e também explica como obtemos o benefício da compilação incremental / condicional.
A compilação de C # é um processo de duas etapas, consulte o diagrama abaixo para obter mais detalhes:
Se você comparar os diretórios bin e obj, encontrará um número maior de arquivos no diretório "obj", pois ele possui arquivos de código compilados individuais, enquanto "bin" possui uma única unidade.
O obj
diretório é para arquivos de objetos intermediários e outros arquivos de dados transitórios que são gerados pelo compilador ou pelo sistema de compilação durante uma compilação. obin
diretório é o diretório no qual os binários de saída final (e quaisquer dependências ou outros arquivos implementáveis) serão gravados.
Você pode alterar os diretórios reais usados para os dois propósitos nas configurações do projeto, se desejar.
Um fato interessante sobre o diretório obj: se você tiver a publicação configurada em um projeto da web, os arquivos que serão publicados serão preparados para obj \ Release \ Package \ PackageTmp. Se você deseja publicar os arquivos você mesmo, em vez de usar o recurso VS integrado, você pode pegar os arquivos que realmente precisa implantar aqui, em vez de selecionar todos os detritos digitais no diretório bin.
Tenha cuidado com os setup
projetos se estiver usando-os; Os projetos de instalação do Visual Studio são Primary Output
extraídos da obj
pasta e não dobin
.
Eu estava liberando aplicativos que pensei que estavam ocultos e com msi
configurações iniciadas por um bom tempo antes de descobrir que os arquivos de aplicativos implantados não eram ocultados nem assinados, enquanto eu realizava o procedimento pós-compilação nos bin
assemblies de pastas e deveria ter como alvo a obj
pasta assemblies.
Isso está longe de ser intuitivo, mas a setup
abordagem geral é usar o Primary Output
do projeto e essa é a obj
pasta. Eu adoraria se alguém pudesse lançar alguma luz sobre este btw.