Pergunta

Eu tenho um VS (2008) solução que consiste de vários projetos, nem todos no mesmo namespace. Quando eu construir a solução, todas as DLLs usadas pelo projeto nível superior TopProject são copiados para o TopProject \ bin \ debug pasta. No entanto, os ficheiros.pdb correspondentes só são copiados para alguns dos outros projetos. Esta é uma dor, por exemplo, quando usando NDepend .

Como o VS decidir quais arquivos PDB para copiar para bin \ pastas de depuração de nível superior? Como posso obter VS para copiar os outros também?


Editar:

As referências são as seguintes: todas as DLLs são copiados para um local central, sem os seus pdbs. TopProject única tem referências a essas dlls copiadas; as DLLs-se, no entanto, evidentemente, saber onde seus pdbs são, e (a maioria deles) são copiados para a pasta de depuração corretamente.

Foi útil?

Solução

A partir MSDN :

Um banco de dados do programa (PDB) arquivo detém depuração e projeto do Estado informação que permite incrementais ligação de uma configuração de depuração de seu programa. Um arquivo PDB é criado quando compilar um programa C / C ++ com / ZI ou / Zi ou Visual Básico / C # / programa JScript .NET com / Debug.

Portanto, parece que a "questão" aqui (por falta de uma palavra melhor) é que alguns dos seus DLLs estão sendo construídas no modo de depuração (e PDBs portanto emissores), e alguns estão sendo construídas no modo de versão (daí não emitindo PDBs). Se for esse o caso, deve ser fácil de corrigir - entrar em cada projeto e atualizar suas configurações de compilação. Este seria o cenário padrão, se você não tiver feito qualquer ajuste de opções de linha de comando.

No entanto, ele vai ficar mais complicado se isso não é o caso. Talvez você é tudo no modo de depuração de lançamento ou. Agora você precisa de olhar para as opções de compilação linha de comando (especificadas nas propriedades do projeto) para cada projeto. Atualizá-los para / debug de acordo, se você quiser que o depurador, ou removê-lo se você não.

Editar em resposta à Editar

Sim, as DLLs "sabe" que eles têm PDBs, e têm caminhos para eles, mas isso não significa muito. Copiar apenas DLLs para um determinado diretório, como os outros, não vai limpar esta questão se. Você precisa das PDBs também.

A cópia de arquivos individuais no Windows, com exceção de certos "pacote" arquivos -tipo (eu não prazo da Microsoft para isso, mas "pacotes HTML completos" são o conceito) não copia arquivos associados. DLLs não são montados no caminho "pacote", então copiá-los deixa seu APO para trás.

Eu diria que a única resposta que você vai ter é atualizar o seu processo para obter as DLLs para esses locais centrais, e incluir os PDBs ... Eu adoraria ser provado errado sobre isso, embora!

Outras dicas

Como outras mensagens ter dito, você pode ter um problema de compilador / corrupção.

Mas, como Will disse, se os arquivos PDB estão sendo criados, mas não aparecendo onde quiser, criar uma etapa de pós-construção. Aqui é a etapa pós-build eu defino para cada projeto na minha solução. Ele garante todos os arquivos de saída são copiados para a dir comum.

Se o seu arquivo proj está em \ SolutionDir \ ProjDir, em seguida, a primeira linha da etapa de pós-build irá copiar os arquivos de saída para \ Solution \ Bin \ Release ou \ Solution \ Bin \ Debug. A segunda linha copia o arquivo PDB se esta é uma compilação de depuração. Eu não copiar o arquivo pdb para compilações Release.

Assim, \ SolutionDir \ Bin agora contém todos os seus arquivos de saída em um único local.

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)

Em primeiro lugar, nunca assumir nada. Limpe a solução, reconstruí-lo no modo de depuração, e verifique se todos os arquivos PDB são criados. Se não, esse é o seu problema.

Se eles são criados, e eles não estão todos sendo copiado, você pode contornar isso criando um evento pós compilação que copia manualmente os arquivos pdb para os locais desejados. Esta é apenas uma solução alternativa, é claro.

A única coisa que posso pensar é que o seu arquivo de solução se tornou corrupto. Você pode abrir seu .sln como um arquivo xml e examinar o conteúdo. Verifique a configuração para os projetos que estão agindo como o esperado e compará-los com aqueles que não são. Se você não ver nada, você tem que repetir isso no nível do projeto. Compare .csproj de trabalho (ou qualquer outro) arquivos de projeto e os não-trabalho.


Editar em resposta a editar :

Se você está copiando apenas manualmente coisas ao redor, em seguida, copiar manualmente os pdbs também. Dll não deve "saber" alguma coisa sobre pdbs, eu acredito. Basta ficar 'em no diretório de destino e ir tomar uma xícara de café. Relaxe.

Verifique quando você limpar a solução, que é realmente limpo. Eu vi os arquivos de licença VS pendurados em torno de bin \ diretórios de depuração mesmo após a limpeza. Excluir o bin \ debug em todos os seus projetos e reconstruir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top