Pregunta

Tengo una solución VS (2008) que consta de varios proyectos, no todos en el mismo espacio de nombres. Cuando compilo la solución, todos los archivos DLL utilizados por el proyecto de nivel superior TopProject se copian en la carpeta TopProject \ bin \ debug . Sin embargo, los archivos .pdb correspondientes solo se copian para algunos de los otros proyectos. Esto es un problema, por ejemplo cuando se utiliza NDepend .

¿Cómo decide VS qué archivos .pdb copiar en las carpetas bin \ debug de nivel superior? ¿Cómo puedo hacer que VS también copie a los demás?


Editar:

Las referencias son las siguientes: todas las DLL se copian en una ubicación central, sin sus pdbs. TopProject only tiene referencias a estas dlls copiadas; sin embargo, los archivos DLL mismos saben evidentemente dónde están sus pdbs y (la mayoría de ellos) se copian correctamente en la carpeta de depuración.

¿Fue útil?

Solución

De MSDN :

  

Un archivo de base de datos de programa (PDB) contiene   depuración y estado del proyecto   Información que permite incremental.   vinculación de una configuración de depuración de   su programa Se crea un archivo PDB   cuando compilas un programa C / C ++ con   / ZI o / Zi o un Visual   Programa básico / C # / JScript .NET con   / debug.

Por lo que parece que el " problema " aquí (por falta de una palabra mejor) es que algunas de sus DLL se están construyendo en modo de depuración (y por lo tanto emiten PDB), y algunas se están incorporando en modo de lanzamiento (por lo tanto, no se emiten PDB). Si ese es el caso, debería ser fácil de arreglar: vaya a cada proyecto y actualice la configuración de compilación. Este sería el escenario predeterminado, si no ha realizado ningún ajuste de las opciones de la línea de comandos.

Sin embargo, será más complicado si ese no es el caso. Tal vez usted está todo en modo de liberación o depuración. Ahora debe ver las opciones de compilación de la línea de comandos (especificadas en las propiedades del proyecto) para cada proyecto. Actualícelos a / depure en consecuencia si desea el depurador, o elimínelo si no lo desea.

Editar en respuesta a Editar

Sí, los archivos DLL " saber " que tienen PDB, y tienen caminos para ellos, pero eso no significa mucho. Copiar solo archivos DLL en un directorio determinado, como han mencionado otros, no solucionará este problema. Usted necesita los PDB también.

Copiar archivos individuales en Windows, con la excepción de ciertos archivos de tipo " bundle " (no uso el término de Microsoft para esto, pero "los paquetes HTML completos" son el concepto) no copia los archivos asociados. Los archivos DLL no se ensamblan en el paquete " " " Manera, así que copiarlos deja atrás su PDB.

Diría que la única respuesta que tendrás es actualizar tu proceso para obtener las DLL en esas ubicaciones centrales, e incluir las PDB ... ¡Me encantaría que me demuestre lo contrario!

Otros consejos

Como han dicho otras publicaciones, es posible que tenga un problema de compilación / corrupción.

Pero, como dijo Will, si los archivos pdb se están creando, pero no se muestran donde los quieres, crea un paso posterior a la compilación. Aquí está el paso posterior a la construcción que defino para cada proyecto en mi solución. Se asegura de que todos los archivos de salida se copien en un directorio común.

Si su archivo de proyecto está en \ SolutionDir \ ProjDir, la primera línea del paso posterior a la compilación copiará los archivos de salida en \ Solution \ Bin \ Release o \ Solution \ Bin \ Debug. La segunda línea copia el archivo pdb si se trata de una compilación de depuración. No copio el archivo pdb para las versiones de lanzamiento.

Por lo tanto, \ SolutionDir \ Bin ahora contiene todos los archivos de salida en una ubicación.

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

Primero que nada, nunca asumas nada. Limpie la solución, reconstrúyala en modo de depuración y verifique si se han creado todos los archivos pdb. Si no, ese es tu problema.

Si se crean y no todos se copian, puede solucionar esto creando un evento de compilación posterior que copie manualmente los archivos pdb en las ubicaciones deseadas. Esto es solo una solución, por supuesto.

Lo único en lo que puedo pensar es que el archivo de su solución se ha corrompido. Puede abrir su archivo .sln como un archivo xml y examinar los contenidos. Verifique la configuración de los proyectos que funcionan como se espera y compárelos con los que no lo son. Si no ve nada, debe repetirlo en el nivel del proyecto. Compare los archivos de proyecto .csproj (o lo que sea) de trabajo y los que no funcionan.


Editar en respuesta a la edición :

Si solo estás copiando cosas manualmente, copia también los pdbs manualmente. Dll's no debe " saber " cualquier cosa sobre pdbs, creo. Simplemente pégalos en el directorio de destino y toma una taza de café. Relájate.

Cuando limpie la solución, verifique que esté realmente limpia. He visto a VS dejar archivos colgando en los directorios bin \ debug incluso después de limpiarlos. Elimine el directorio bin \ debug en todos sus proyectos y reconstrúyalo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top