Tengo dos soluciones en mi espacio de trabajo, digamos A y B.
La solución A es un proyecto anterior que terminé de codificar hace algún tiempo. En la solución B, necesito usar algunas clases de la Solución A. Para hacerlo, agrego una referencia a la dll de uno de los proyectos en la solución A.
El problema es cuando intento depurar. Quiero poder entrar en el código de A también. Visual Studio no puede cargar el código para estas clases ("No hay código fuente disponible para la ubicación actual") y solo puedo ver el desmontaje, lo que no es útil.
La única forma en que sé depurar clases de la solución A es ejecutando la solución B, desconectar todos los procesos (en el elemento del menú Depurar) y adjuntar el proceso de la solución A.
Sin embargo, esto es muy inconveniente y solo puedo depurar A o B a la vez.
¿Hay alguna manera de permitir entrar en el código de dlls referenciados (para lo cual sí tengo el código fuente)?
Solución: Mi error fue pensar que un proyecto solo puede ser parte de una única solución. De hecho, un proyecto puede ser parte de cualquier cantidad de soluciones.
Cuando necesite hacer referencia al proyecto anterior, simplemente debe agregar el proyecto a la solución. Esto se hace haciendo clic derecho en la nueva solución en el Explorador de soluciones> Agregar> Proyecto existente.
Luego, podrá agregar la referencia del proyecto. Como otros escribieron, probablemente debería evitar por completo el uso de referencias dll a su propio código (u otro código que necesite cambiar y depurar).
Se puede encontrar una muy buena referencia sobre cómo se deben diseñar las soluciones en MSDN .
Respuestas:
Si tiene una referencia de proyecto , debería funcionar de inmediato.
Si se trata de una referencia de archivo (dll), necesita que los símbolos de depuración (el archivo "pdb") estén en la misma carpeta que el dll. Verifique que sus proyectos estén generando símbolos de depuración (propiedades del proyecto => Build => Advanced => Output / Debug Info = full); y si ha copiado el dll, coloque el pdb con él.
También puede cargar símbolos directamente en el IDE si no desea copiar ningún archivo, pero es más trabajo.
¡La opción más fácil es usar referencias de proyecto!
fuente
Tuve el mismo problema. Él es lo que encontré:
1) asegúrese de que todos los proyectos estén usando el mismo Marco (¡esto es crucial!)
2) en Herramientas / Opciones> Depuración> General, asegúrese de que "Activar solo mi código (solo administrado) NO esté marcado
3) en Herramientas / Opciones> Depuración> Símbolos, borre todos los símbolos almacenados en caché, desmarque y elimine todas las ubicaciones de carpeta en el cuadro de lista "Ubicaciones de archivo de símbolos (.pdb)", excepto los "Servidores de símbolos de Microsoft" predeterminados, pero aún no lo marque. Elimine también cualquier ruta estática en el cuadro de texto "Símbolos de caché en este directorio". Haga clic en el botón "Vaciar caché de símbolos". Finalmente, asegúrese de que el botón de opción "Solo módulos especificados" esté marcado.
4) en el menú Administrador de compilación / configuración para todos los proyectos, asegúrese de que la configuración esté en modo de depuración.
fuente
Otro punto a tener en cuenta, asegúrese de que los dlls referenciados no estén instalados en el GAC. Después de la prueba, instalé mis dlls en el GAC para hacer pruebas a nivel del sistema. Más tarde, cuando tuve que depurar mi código nuevamente, no pude ingresar a los ensambles referenciados hasta que los eliminé del GAC.
fuente
Paso 1: vaya a Herramientas -> Opción -> Depuración
Paso 2: desmarca Habilitar solo mi código
Paso 3: desmarque Requerir que el archivo de origen coincida exactamente con la versión original
Paso 4: desmarque Paso sobre propiedades y operadores
fuente
Tenía los
*.pdb
archivos en la misma carpeta y utilicé las opciones de Arindam , pero todavía no funcionaba. Resulta que necesitaba habilitar Habilitar la depuración de código nativo que se puede encontrar en Propiedades del proyecto> Depuración .fuente
Cuando desee establecer un punto de interrupción en el código fuente de una dll referenciada, primero asegúrese de tener un archivo pdb disponible. Luego, solo puede abrir el archivo de código fuente relacionado y establecer un punto de interrupción allí. El archivo fuente no necesita ser parte de su solución. Como se explica en ¿Cómo puedo establecer un punto de interrupción en el código referenciado en Visual Studio?
Puede revisar sus puntos de interrupción a través de la ventana de puntos de interrupción, disponible a través de Depuración -> Windows -> Puntos de interrupción.
Este enfoque tiene el beneficio de que no es necesario que agregue un proyecto existente a su solución solo para fines de depuración, ya que dejarlo afuera me ha ahorrado mucho tiempo de construcción. Evidentemente, crear una solución con un solo proyecto es mucho más rápido que crear una solución con muchos de ellos.
fuente
Asegúrese de que su DLL no esté registrada en el GAC. Visual Studio usará la versión en el GAC y probablemente no tendrá información de depuración.
fuente
No quiero incluir un proyecto de biblioteca de clase externa en algunas de mis soluciones, así que me meto en ensamblajes que consumo de una manera diferente.
Mis soluciones tienen un directorio "Ensamblados comunes" que contiene mis propios archivos DLL de otros proyectos. Las DLL a las que me refiero también tienen sus archivos PDB para la depuración.
Para depurar y establecer puntos de interrupción, configuro un punto de interrupción en la fuente de la aplicación de consumo donde llamo a un método o constructor desde el ensamblaje y luego paso a (F11) la llamada al método / constructor.
El depurador cargará el archivo fuente del ensamblaje en VS y en ese punto se pueden establecer nuevos puntos de interrupción dentro del ensamblaje.
No es sencillo, pero funciona si no desea incluir una nueva referencia de proyecto y simplemente desea hacer referencia a un ensamblado compartido.
fuente
Debe funcionar ¡Solía depurar un archivo .exe y un dll al mismo tiempo! Lo que sugiero es 1) Incluir la ruta de la dll en su proyecto B, 2) Luego compilar para depurar su proyecto A 3) Controlar que la ruta apunta en el archivo A dll y de pdb ... 4) Después de eso comience a depurar el proyecto B y si todo está bien, ¡podrá depurar en ambos proyectos!
fuente
La forma más directa que encontré al usar VisualStudio 2019 para depurar una biblioteca externa a la que hace referencia en NuGet es mediante los siguientes pasos:
Herramientas> Opciones> Depuración> General> Desmarque 'Habilitar solo mi código'
Vaya al Explorador de ensamblajes> Abrir desde la caché de paquetes NuGet
Escriba el nombre del paquete NuGet que desea depurar en el campo de búsqueda y haga clic en 'Aceptar'
Desde el Explorador de ensamblajes, haga clic derecho en el ensamblado importado y seleccione 'Generar Pdb'
Seleccione una ruta personalizada donde desee guardar el archivo .PDB y el marco para el que desea que se genere
Copie el archivo .PDB de la carpeta generada en su carpeta de depuración y ahora puede establecer puntos de interrupción en el código de biblioteca de este ensamblado
fuente