2008-09-25 8 views
10

Tengo una solución VS (2008) que consta de varios proyectos, no todos en el mismo espacio de nombres. Cuando construyo la solución, todos los dlls 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 dolor, por ejemplo cuando se usa NDepend.Archivos PDB en VisualStudio bin carpetas de depuración

¿Cómo decide VS qué archivos .pdb copiar en carpetas bin \ debug de nivel superior? ¿Cómo puedo obtener VS para copiar los otros también?


Editar:

Las referencias son las siguientes: todos los archivos DLL se copian en una ubicación central, sin sus PDB. TopProjectsolo tiene referencias a estos dlls copiados; sin embargo, los propios dlls saben dónde están sus pdbs, y (la mayoría de ellos) se copian correctamente en la carpeta de depuración.

+0

¿Todos los proyectos (el proyecto, no un archivo * .dll/*. Exe) están referenciados al "TopProject"? – TcKs

+0

No, ninguno de ellos: vea mi edición de la pregunta. –

+0

tengo varios archivos pdb conmigo. Lo descargué de la página de descarga de Python como complemento de Visual Studio o algo así. ¿Cómo importarlo a Visual Studio? –

Respuesta

11

De MSDN:

Un archivo de base de datos de programa (AP) mantiene la depuración y el estado del proyecto información que permite incrementales vinculación de una configuración de depuración de su programa. Se crea un archivo PDB al compilar un programa C/C++ con /ZI o/Zi o un programa Visual Básico/C#/JScript .NET con /debug.

lo que parece que el "problema" aquí (a falta de una palabra mejor) es que algunos de sus archivos DLL se están construyendo en modo de depuración (y PDB, por lo tanto emisores de luz), y algunos se están construyendo en modo de lanzamiento (de ahí que no emitan PDB). Si ese es el caso, debería ser fácil de solucionar: ingrese a cada proyecto y actualice su configuración de compilación. Este sería el escenario predeterminado, si no ha hecho ningún ajuste de las opciones de línea de comando.

Sin embargo, será más complicado si ese no es el caso. Tal vez estás en modo de liberación o depuración. Ahora necesita mirar las opciones de compilación de línea de comando (especificadas en las propiedades del proyecto) para cada proyecto. Actualízalos a/debug en consecuencia si quieres el depurador, o quítalo si no lo haces.

Editar en respuesta a Editar

Sí, las DLL de "saber" que tienen PDB, y tienen caminos para ellos, pero eso no significa demasiado. Copiar solo archivos DLL a un directorio determinado, como han mencionado otros, no resolverá este problema. Necesitas los PDB también.

Copiar archivos individuales en Windows, con la excepción de ciertos archivos de tipo "paquete" (no lo denomino Microsoft, pero "paquetes HTML completos" son el concepto) no copian los archivos asociados. Las DLL no se ensamblan en el modo "paquete", por lo que copiarlas deja su PDB atrás.

Diría que la única respuesta que tendrá es actualizar su proceso para obtener los archivos DLL en esas ubicaciones centrales, e incluir los PDB ... Sin embargo, me encantaría que se demuestre lo contrario. !

+0

no, no es tan simple. Todos los proyectos están compilados en depuración, y todos tienen las mismas opciones de cumplimiento. –

+0

tengo varios archivos pdb conmigo. Lo descargué de la página de descarga de Python como complemento de Visual Studio o algo así. ¿Cómo importarlo a Visualstudio? –

+0

@John Rudy Después de verificar todas esas configuraciones, asegúrese de limpiar la solución y reconstruir ... – Nescio

2

En primer lugar, nunca asuma nada. Limpie la solución, recupérela en modo de depuración y verifique si se crean todos los archivos pdb.Si no, ese es tu problema.

Si se crean, y no todas 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.

La única otra cosa que puedo pensar es que su archivo de solución se ha dañado. Puede abrir .sln como un archivo xml y examinar los contenidos. Verifique la configuración de los proyectos que están actuando según lo esperado y compárelos con los que no lo están. Si no ve nada, debe repetir esto a nivel de proyecto. Compare los archivos .csproj de trabajo (o lo que sea) de proyecto y los que no funcionan.


Editar en respuesta a editar:

Si va a copiar manualmente simplemente cosas de un lado, a continuación, copiar manualmente los PDBs también. Dll no debería "saber" nada sobre pdbs, creo. Solo pégalos en el directorio de destino y ve a tomar una taza de café. Relajarse.

+2

De hecho, los dlls (de depuración) saben dónde están sus pdbs, el camino está codificado en algún lugar. Y sí, podría hacerlo a mano (o ajustar mi copia automática), pero me gustaría saber por qué la maldita cosa se comporta como lo hace. ¿Y quién dijo que no estoy relajado? ¡Estoy relajado! ¡Maldición! Aaaargh! :) –

2

Al limpiar la solución, verifique que esté realmente limpia. He visto a VS dejar archivos colgados en bin \ debug directorios incluso después de la limpieza. Elimine el directorio bin \ debug en todos sus proyectos y vuelva a generarlos.

+0

He visto a VS hacer eso también. Hay una configuración que puede definir qué se limpia para su información. – TinyRacoon

3

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 quiere, cree 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 se encuentra en \ SolutionDir \ ProjDir, la primera línea del paso posterior a la compilación copiará los archivos de salida en \ Solución \ 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 versiones de lanzamiento.

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

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

Tengo varios archivos pdb conmigo. Lo descargué de la página de descarga de Python como complemento de Visual Studio o algo así. ¿Cómo importarlo a Visualstudio? –

Cuestiones relacionadas