“El punto de ruptura no se alcanzará actualmente. El código fuente es diferente de la versión original ". ¿Qué significa esto?

514

Al depurar en Visual Studio, a veces agrego un punto de interrupción pero está vacío y VS dice "El punto de interrupción no se alcanzará actualmente. El código fuente es diferente de la versión original". Obviamente, esto me impide poder depurar.

¿Qué demonios significa el mensaje? ¿Qué versión original? Si acabo de abrir la solución y no he realizado ningún cambio en el código, ¿cómo puede haber una 'versión original'?

David
fuente
36
recompilar / construir el proyecto antes de agregar el punto de quiebre
lexu
¿Estás abriendo un proyecto escrito en otra versión de Visual Studio?
Mahesh Velaga
2
Es un proyecto de sitio web. No debería haber necesidad de construirlo explícitamente. Debe compilarse con el uso. Sospecho que VS no puede construir el sitio web, ¡pero no me dice eso! Mahesh: no, toda la misma versión de VS.
David
En mi caso, tengo diferentes versiones del mismo código (por ejemplo, test.cs en la versión en vivo y la versión de devolución ... cuando abrí la versión de devolución y puse el punto de interrupción en test.cs me dio el mismo error, pero descubrí que puse la prueba de punto de interrupción Cs clase que se refería a la versión en vivo del GLC no devolopment a fin de comprobar el CS tiene ya en la construcción de la solución)
dankyy1
55
Eliminar directorios bin y obj que reconstruir me funcionó.
Aycan Yaşıt

Respuestas:

277

Como dice, el "código fuente es diferente de la versión original".

Haga clic derecho en la carpeta del proyecto dentro del explorador de soluciones y elija Clean. ¡Cree una nueva versión del proyecto y el punto de interrupción volverá a funcionar!

Veedrac
fuente
120
Usar clean no siempre funciona. Tuve que eliminar manualmente todo en mi carpeta bin para que volviera a funcionar.
Carra
3
Por error tuve una referencia a una DLL en mi carpeta bin. Corrección de ruta de referencia fijada.
Brad Urani
39
Para mí, incluso eliminar las carpetas bin y obj no funcionó. Tuve que reiniciar Visual Studio también.
d512
1
Pasé casi un día para encontrar la solución. Muchas gracias por proporcionar una solución.
Racs
8
Cerré VS, eliminé todas las carpetas bin y obj, reconstruí todo, verifiqué las configuraciones de compilación, la compilación está teniendo éxito. No dados. Las cosas simples no deberían ser tan complicadas. >: |
snarf
129

Si ha desmarcado el proyecto DLL en la configuración de compilación de depuración , ¡su nuevo código nunca se construirá!

Vaya a Build --> Configuration Manager ...(en VS2010) y verifique si el proyecto con el código que está tratando de depurar está marcado para la configuración de compilación actual.

Oliver
fuente
Gracias por la sugerencia Oliver. Eso definitivamente no ha estado sucediendo aquí, me daría cuenta bastante rápido si uno de mis proyectos no se estuviera construyendo.
David
3
Tuve exactamente el mismo problema, solo que no tenía nada sin marcar. ¡fue solo compilación para x86 en ese diálogo, mientras que mi máquina local es x64! Así que seleccioné la Any CPUopción y funciona de nuevo.
JP Hellemons
3
Eliminar proyectos de la configuración de depuración sin una razón válida debería ser un pecado capital, ya que esa configuración bien puede ser utilizada por la máquina de compilación de CI (sé que está aquí), por lo que en última instancia podría pasar eso cuando falla. Sé que podría ser uno de los muchos pasos de construcción, pero aún así ... @Oliver ¡Espero que el miembro del equipo te haya comprado algunas galletas! :)
Fetchez la vache
Tuve este problema cuando cambié a compilación para x86 en lugar de AnyCPU. Eliminó proyectos de ser construidos por alguna razón desconocida.
Adam Pedley
El proyecto está en la lista para Construir en el administrador de configuración, por lo que esto no me ha ayudado, me temo :(
Ortund
43

Para mí fue mientras trabajaba en un proyecto de sitio web. Después de limpiar estas carpetas temporales, obtuve los errores de compilación adecuados:

  • C:\Documents and Settings\%username%\AppData\Local\Temp\Temporary ASP.NET Files
  • C:\windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

Finalmente resolví el problema cuando descubrí que un archivo de clase que había movido intencionalmente a una subcarpeta, de alguna manera reapareció en la carpeta raíz. VS estaba usando ese mientras yo editaba el otro.

AnthonyVO
fuente
2
Vaciar los archivos temporales en el directorio de Windows funcionó para mí, ¡salud!
ChrisFletcher
77
Solo quería agregar una respuesta similar: asegúrese de que no haya ninguna copia antigua de la dll de su proyecto en ninguna de las carpetas temporales que usa ASP.NET, como C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Archivos temporales ASP.NET , como se mencionó, pero también C: \ Windows \ Microsoft.NET \ Framework_64_ \ v4.0.30319 \ Archivos temporales ASP.NET . Uso Everything para buscar rápidamente esas copias .
Oliver
12
Solo una pista rápida: escribir %localappdata%en el cuadro de búsqueda te lleva directamente aC:\Documents and Settings\%username%\AppData\Local
dav_i
1
Puedo confirmar que esto funcionó para mí en Visual Studio 2013 en un proyecto de servicio web.
Moeri
Hice todo esto pero no parece haber ayudado. Estaba muy emocionado de ver esto también.
Ortund
40

¿Alguna vez hiciste esto?

¿Desea continuar y ejecutar la última compilación exitosa?

Si marcó la casilla y presionó "Sí", obtendrá la última compilación exitosa ejecutándose aunque su proyecto no se compile. Esto significa que siempre que establezca un punto de interrupción, obtendrá ese error.

Intente cambiar este valor:

  • Herramientas
    • Opciones
      • Proyectos y soluciones
        • Construye y corre
          • En ejecución, cuando se producen errores de compilación o implementación: no iniciar
Codesleuth
fuente
No creo que haya hecho eso. Gracias por el enlace sin embargo. ¡Me dio una idea de lo que significa ese aviso!
David
11
Visual Studio tenía esta opción desde hace décadas (al menos VS98 la tenía). Nunca entendí por qué alguien querría ejecutar la última compilación exitosa. Después de todo, si eso fuera lo que quería, lo habría lanzado directamente, ya que de todos modos no podía depurarlo. No iniciar habría sido un valor predeterminado más sensato.
OregonGhost
66
Lo he usado varias veces para ejecutar el proyecto (por cualquier razón, como para mostrarle a alguien más) mientras todavía estoy en el medio de escribir código que no se compilará. A veces es útil. Personalmente, lo dejo deshabilitado.
Codesleuth
3
Tal vez si tuvieran que mostrarle a su superior cuando de repente él apareciera. Podrían presionar f5 y ser como "ya ves, ¡funciona!"
Gigala
33

Ir

  • Herramientas
    • Opciones
      • Depuración
        • General

Desmarque Requerir que los archivos de origen coincidan exactamente con la versión original

Rachmad
fuente
17
@Rachmad Esta solución funciona. Pero parece que no es la solución completa, porque significa que nuestros archivos de origen no coinciden exactamente con la versión original
onmyway133
Esto es exactamente lo que estaba buscando por @entropy es correcto. Si bien esto permite establecer los puntos de interrupción, el hecho es que la fuente que se está utilizando no coincide con el pdb que se está utilizando. La mejor solución es arreglar eso. En tiempos que no se pueden hacer, esto funciona muy bien.
JamesG
Incluso con esto desmarcado, la ejecución no alcanza el punto de quiebre y el error persiste
Ortund
12
Esta NO es una solución a este problema sino una solución alternativa. Obviamente no quiero trabajar con archivos obsoletos en el depurador.
Obi Wan
2
@ObiWan No es obvio. Me gusta hacer ediciones menores y continuar depurando incluso sabiendo que la fuente y la compilación son diferentes.
Alan Baljeu el
30

Seleccione Debug en Configuraciones de soluciones , en lugar de Release

captura de pantalla del menú

AdiKonstantin
fuente
1
Este fue mi problema. Compilé en modo de depuración, cambié el código y luego lo ejecuté en modo de lanzamiento. No es de extrañar que el depurador pensara que el código era diferente: los símbolos de depuración eran diferentes. Cuando eliminé la carpeta bin como otros sugirieron, recibí el error "no se han cargado símbolos para este documento". Fue solo entonces que hice la conexión y me dirigí a esta respuesta. ¡Necesita más votos!
indot_brad
Es posible que el proyecto se deshabilite para la compilación incluso en la configuración de compilación de depuración. Se requiere un examen de la configuración de compilación, el flip-flop entre la configuración de Depuración / Liberación no tiene sentido.
Asad Saeeduddin
Esto fue para mí también. intenté limpiar, reconstruir las otras soluciones referenciadas en vano. No me di cuenta de que la solución me estaba mirando a la cara
Adam Hey
Esto es lo que sucedió conmigo: estaba construyendo mi proyecto y reemplazando mis dlls una y otra vez, pero el problema simplemente no desaparece. Me di cuenta de que el código se estaba creando en modo Release mientras reemplazaba los archivos dlls de la carpeta / bin / debug. Estúpido yo.
displayName
Quería adjuntar a un proceso que se creó en modo de lanzamiento. Cambiar a depurar resolvió mi problema.
cinco de
27

Presta atención a la ventana "Salida" en VS. Le dirá qué ensambles se cargan y cuándo. Puede ver que se está cargando una versión anterior de su ensamblaje en algún lugar de la carpeta.

Por ejemplo, si tiene varios ensamblajes y actualmente está intentando dividir uno de los ensamblajes de soporte, el CLR se encargará de la resolución del ensamblaje, lo que puede cargar otro archivo de ensamblaje que no sea el que ha referenciado en el proyecto.

Tormod
fuente
1
También vale la pena tenerlo en cuenta, pero no creo que sea el problema aquí, ya que estoy tratando de entrar en un proyecto de sitio web, no en una biblioteca de clase.
David
24

Cerrar Visual Studio y volver a abrir la solución puede solucionar el problema, es decir, es un error dentro del IDE (estoy ejecutando VS2010).

Si tiene más de una instancia de Visual Studio ejecutándose, solo necesita cerrar la instancia que ejecuta la solución con el problema.

Luke Whyte
fuente
44
Cerrar Visual Studio también funcionó para mí. Además, con acciones de limpieza / reconstrucción.
danielB
3
Esto solucionó la solución en VS 2015
TaintedLemon
3
Edición fija en VS 2017
Daniel Fisher lennybacon
Se solucionó el problema en VS 2012
seebiscuit
19

Ha aparecido una nueva forma de solucionar este problema desde Visual Studio 2017 15.3.1 hasta 15.3.5. Si está utilizando EditorConfig , la charset=utf8opción causa estos síntomas. El equipo de VS ha reproducido esto y dice que están trabajando en ello .

Entonces, una solución es comentar su charset=utf8línea en el archivo .editorconfig.

Editar: Esto debería solucionarse a partir de VS 15.5.

John Hatton
fuente
El estado ahora es "Fijo - pendiente de lanzamiento" desde hace dos días (9 de octubre de 2017). Lo cual es una buena noticia, ya que UTF-8 es el único valor predeterminado para la codificación de texto en estos días. :-)
rmunn
También noté que la causa principal de este problema fue aparentemente esta otra corrección de errores , donde charset=utf8se interpretaba como "UTF-8 con BOM". Cambiar esa interpretación a "sin BOM" rompió algunos archivos UTF-8 que tenían la BOM en ellos. Entonces, si se encuentra con este problema y la solución de Visual Studio aún no se ha lanzado, intente eliminar la lista de materiales desde el comienzo de sus archivos de texto y eso puede solucionar el problema. (Este comentario está pidiendo una referencia de Zero Wing ... :-))
rmunn
Este fue el problema para mí también. Actualmente, esto no se ha solucionado o al menos no se ha publicado todavía o el error se volvió a introducir (versión 15.4.2)
avidenic el
12

Esto sucede a menudo también si está utilizando un archivo de referencias a binarios (en lugar de referencias de proyecto a código en su proyecto), y el binario compilado al que hace referencia no está sincronizado con el código fuente correspondiente en su máquina. Esto puede suceder porque descargó una nueva versión del binario desde el control de origen sin el nuevo código fuente que lo acompañaba, o si tiene algunas versiones del binario en su máquina y hace referencia a una copia anterior, etc. Si esto es realmente El problema es que es una buena razón para utilizar referencias de proyectos tanto como sea práctico.

Stijn
fuente
Entiendo lo que quieres decir, y vale la pena tenerlo en cuenta para el futuro, pero la fuente en cuestión aquí es un proyecto de sitio web, no una biblioteca de clase.
David
Este es un problema común al elegir código heredado que me deja rascándome la cabeza preguntándome qué genio decidió hacer referencia a un dll de un proyecto en la solución que solo otro proyecto utiliza en la solución. suspiro
Kell
10

Para mí, ninguno de los elementos resolvió el problema. Acabo de agregar una nueva línea de código dentro de esa función, algo así como:

int a=0;

Al agregar eso, creo que activé Visual Studio para agregar esta función a la versión original

Mehrdad Babaki
fuente
7

Esto puede suceder cuando la hora del sistema cambia durante la depuración o entre sesiones de depuración, ya sea mediante programación, manualmente o mediante un programa externo.

Tomi
fuente
No puedo hacer +1 esto lo suficiente. Recientemente reinstalé Windows y no noté que mi reloj del sistema estaba apagado. Efectivamente, este cambio arruinó todo, y reconstruir toda la solución / proyecto lo arregló mágicamente.
Kyle Baran
7

Hay una configuración casi imperceptible que solucionó este problema para mí. Si hay un archivo fuente en particular en el que el punto de interrupción no está llegando, podría aparecer en

  • Explorador de la solución
    • Haga clic con el botón derecho en Solución
      • Propiedades
        • Propiedades Comunes
          • Depurar archivos de origen
            • "No busque estos archivos fuente".

Por alguna razón desconocida para mí, VS 2013 decidió colocar un archivo fuente allí, y posteriormente, ya no pude alcanzar el punto de interrupción en ese archivo. Este puede ser el culpable de "el código fuente es diferente de la versión original".

JBSnorro
fuente
Me enfrenté exactamente al mismo problema. ¡Tu respuesta me ayudó! ¡Gracias! +1
jweyrich
5

El problema es que su información de depuración no está sincronizada con su ensamblaje. La solución es simple:

  1. Ve a tu carpeta bin
  2. Eliminar los archivos .pdb
  3. Reconstruir

Debería hacer el truco!

(Lo extraño es que una reconstrucción sin tirar los archivos .pdb no siempre funciona. Puedo ver que la fecha modificada se actualiza, pero aún en algún lugar de la cadena (depurador VS2013, IIS, caché de ensamblaje) este cambio no se detecta )

FrankyHollywood
fuente
Build-> Clean Solution también debe lograr eliminar los archivos que deben eliminarse.
Dave
Después de una gran pérdida de tiempo debido a este problema, esta solución hizo el truco. Thx FrankyHollywood
AD
4

Puede recibir este mensaje cuando está utilizando un activador y el ensamblaje en el que establece el punto de interrupción aún no se ha cargado.

El punto de interrupción se resolverá una vez que el activador cargue el ensamblaje (suponiendo que el ensamblaje y los símbolos de depuración estén actualizados). Un buen lugar para mirar es la ventana de módulos en el menú de depuración. Allí debe buscar el ensamblaje al que pertenece su archivo también. Primero verifique que el conjunto esté cargado. Entonces, ¿desde dónde se carga? Entonces, se carga el archivo de símbolos. De nuevo, ¿desde dónde se carga el archivo de símbolos? Finalmente verifique las versiones de ambos.

Stijn
fuente
4

Encontré esto también. Las condiciones que causaron mi problema:

  • Estoy ejecutando una instancia completa de IIS7 localmente
  • Estoy versionando mi software en proyectos separados

Había causado esto al abrir una versión anterior (VS me preguntó si quería señalar esta instancia en la depuración de IIS, respondí 'Sí'), luego abrí la versión actual (respondiendo nuevamente al mensaje de IIS con un 'Sí' ), luego intenta depurar en la versión anterior.

Para resolverlo, simplemente cerré y volví a abrir la versión anterior e intencionada, una vez más afirmando que era la fuente de depuración.

baker.nole
fuente
3

Intente deshabilitar y volver a configurar el punto de interrupción mientras se ejecuta en modo de depuración en lugar de hacerlo antes de iniciar el modo de depuración.

mikeTheLiar
fuente
3

Esto sucede también cuando se depura un proyecto de C ++ que carga un módulo que se ha implementado con algún lenguaje CRL (C ++ administrado, C #, etc.). En esta situación, el mensaje de error es realmente engañoso.

La solución es poner la propiedad de configuración de soporte Common Language Runtime (CLR) en el proyecto de inicio y volver a compilarla.

Stijn
fuente
3

Si tiene más de un proyecto en su solución , asegúrese de que el proyecto correcto esté configurado como StartUp Project. Para establecer un proyecto en particular como el Proyecto de inicio de su solución, haga clic con el botón derecho en el proyecto, elija Set As StartUp Project.

Después de configurar mi Proyecto de inicio correctamente, el hilo alcanzó el punto de interrupción deseado.

nombre para mostrar
fuente
También vale la pena señalar que si su punto de interrupción está en un proyecto que NO es su proyecto de inicio, y NO PUEDE convertirse en su proyecto de inicio (porque, por ejemplo, debe tener un proyecto diferente para ser el de inicio) puede (después de comenzar el principal) haga clic con el botón derecho y elija Depurar >> Iniciar nueva instancia del proyecto que tiene el punto de interrupción en el que desea alcanzar
Caius Jard
3

Experimenté esto en una versión de 32 bits en vs2017.

Exactamente ninguna de las soluciones funcionó para mí. Reinicié, borré los archivos IDE, limpié la solución construida, saqué del repositorio de git y reconstruí la solución en vano.

Estaba obteniendo una dependencia de 64 bits de nuget y tan pronto como utilicé el ensamblaje, las fuentes ya no se integraban en el ejecutable final y, en cambio, se construían las fuentes en caché IDE.

Eliminé la configuración de nuget, eliminé el ensamblado al que se hace referencia, descargué el código fuente, construí log4net manualmente, lo firmé, lo agregué a una carpeta en mi proyecto, agregué referencias y pude volver a depurar.

Esto fue un dolor, espero que aparezca en la lista de respuestas para que todos lo vean.

Editar: no hubo ningún error durante la compilación a pesar de que la opción "solicitar un error de compilación" se activó en la configuración del IDE.

revs nurettin
fuente
3

Para mí, la solución estaba oculta en las Advanced Build Settingspropiedades del proyecto: ingrese la descripción de la imagen aquí

Por una razón desconocida, se configuró en none: configurarlo para fullque se golpeen los puntos de interrupción.

Para llegar a este cuadro de diálogo, abra las propiedades del proyecto, luego vaya a Build, luego seleccione el Advanced...botón en la parte inferior de la página.

riqitang
fuente
3

Tuve el mismo problema en varios proyectos en un proyecto de arquitectura en capas y el problema estaba en las configuraciones, la casilla de verificación de compilación para el proyecto seleccionado no ha sido marcada. entonces el problema se solucionó para un proyecto.

Para otra capa estaba dando el mismo problema, incluso la construcción está habilitada en las configuraciones. Hice todas las demás opciones, como reiniciar la limpieza del proyecto, pero ninguna de ellas ayudó. Finalmente, desmarqué la casilla de verificación de compilación para ese proyecto en particular y limpié y reconstruí. De nuevo marcó la casilla de verificación e hizo lo mismo. entonces se solucionó el problema.

Espero que esto ayude..

Priyankara
fuente
2

En mi caso, estaba adjuntándome a un proceso en ejecución en VS 2012. Cuando lo adjunto, tiene la opción de depurar en varios modos (nativo, script, silverlight, Managed 2.0, Managed 4.0, etc.). Por defecto, el depurador selecciona el modo automáticamente. Sin embargo, Automático no siempre toma la decisión correcta. Si su proceso contiene múltiples tipos de código, asegúrese de que el depurador esté usando el correcto.

tono silencioso
fuente
En mi caso, estaba adjuntando a w3wp.exe para depurar el código .NET, pero por alguna razón estaba adjuntando el depurador de secuencias de comandos que no podía ver mis puntos de interrupción de C #. Cambiarlo al depurador .NET permitió que mis puntos de interrupción de C # funcionaran.
Oran Dennison
2

En mi caso, estaba desarrollando una aplicación de Windows CE, que probó contra un emulador. El problema era que el ejecutable no se implementó en el emulador, por lo que el .pdb (en el entorno de desarrollo) no estaba sincronizado con el .exe (en el emulador), porque el nuevo .exe nunca se copió al emulador. Tuve que eliminar el .exe en el emulador para forzar una nueva implementación. Entonces funcionó.

Julen
fuente
2

Lo que funcionó para mí fue cambiar la plataforma de la solución de x86 a cualquier CPU. Después de cambiar a Cualquiera, configuré una dirección de detención, ejecuté el sitio web, abrí la página, hice clic en el botón y se detuvo. Cerré el sitio, cambié de nuevo a x86 y realicé la misma secuencia con éxito.

John
fuente
2
¿Quizás la elección de la CPU no afecta el problema en absoluto y es solo el hecho de que obliga a una reconstrucción?
jwg
Utilizará otra carpeta bin, probablemente haya un dll antiguo en cualquier mapa de la CPU.
Carra
Tuve este problema mientras la plataforma activa x86 (que nunca usé), volver a Win32 resolvió el problema. La PC es compartida, por lo que alguien más configuró esa plataforma por cualquier motivo.
Zac
2

En Windows 7, Visual Studio Express 2010, si ha activado la opción Usar modo de compatibilidad para Windows XP SP3 , este error puede ocurrir.

Desmarqué la opción y funcionó perfectamente de nuevo. Haga clic derecho en el acceso directo a VS o al ejecutable, seleccione propiedades y luego compatibilidad .

Pete
fuente
1
Lo que podría estar sucediendo aquí es que la configuración de su versión cambia de x32 a x64 cuando deshabilita el modo de compatibilidad, y es posible que no tenga todos sus proyectos seleccionados para compilar en x32. Por qué ciertos proyectos están deshabilitados para la compilación en x32 es algo de lo que tendrá que hablar con los miembros de su equipo.
Asad Saeeduddin
Ese fue exactamente mi problema. ¡Gracias!
Johan Holtby
2

Primero lo intenté desde la línea de comando;

eliminar archivos temporales de la línea de comando funcionó.

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Archivos temporales de ASP.NET> raíz rd / s

Cuando desactivo la opción "Activar solo mi código" en Herramientas -> Opciones -> Depuración -> General

El problema se resolvió para mí. Es una aplicación WCF, intentaba depurar una página ashx. http://blogs.msdn.com/b/zainnab/archive/2010/10/25/understanding-just-my-code.aspx

Teoman shipahi
fuente
2

Me sucedió porque tenía otros proyectos en la solución que no se estaban construyendo. Después de descargar esos proyectos problemáticos (haga clic con el botón derecho en el proyecto en el explorador de soluciones -> Descargar proyecto), reconstruí la solución y corrí nuevamente: ¡el punto de interrupción fue alcanzado!

Sarah
fuente
2

Resultó estar en Visual Studio 2017 después de agregar archivos existentes al proyecto. Esto funcionó para mí:

  1. cierra la solución,
  2. ir SolutionFolder\.vs\SolutionName\v15\sqlite3y quitarstorage.ide
  3. abre la solución nuevamente
laurian
fuente
¡Gracias por esta solución! Ninguno antes funcionaba, y esto me salvó el día :)
StefanaB
2

Asegúrese de no estar en modo de liberación cuando intente depurar.

Adelante
fuente