Modifica e continua: "Le modifiche non sono consentite quando ..."


108

Anche se creo un progetto WinForms pulito, Modifica e continua non funziona e mi dà l'errore:

Le modifiche non sono consentite quando il debugger è stato collegato a un processo già in esecuzione o il codice in fase di debug è stato ottimizzato in fase di compilazione o esecuzione.

  1. L'opzione Modifica e continua è selezionata in Strumenti → Opzioni → Debug.
  2. L'ottimizzazione non è abilitata.
  3. Sembra che non sia stato configurato alcun profiler gestito.
  4. Sto eseguendo in modalità Debug
  5. Sto funzionando su CPU x64 e Windows XP a 32 bit, ma l'impostazione dell'obiettivo della piattaforma su x86 anziché su AnyCpu non aiuta.
  6. La riparazione dell'installazione di Visual Studio non aiuta.

Ho anche trovato questo articolo sul sito Web MSDN:

Scenari non supportati

Modifica e continua non è disponibile nei seguenti scenari di debug:

  • Debug su Windows 98.

  • Debug in modalità mista (nativa / gestita).

  • Debug SQL.

  • Debug di un dump del Dr. Watson.

  • Modifica del codice dopo un'eccezione non gestita, quando l'opzione "Unwind the call stack on unhandled exceptions" non è selezionata.

  • Debug di un'applicazione runtime incorporata.

  • Debug di un'applicazione con Connetti a anziché eseguire l'applicazione con Avvia dal menu Debug.

  • Debug del codice ottimizzato.

  • Debug del codice gestito quando la destinazione è un'applicazione a 64 bit. Se vuoi usare Modifica e Continua, devi impostare il target su x86. (Proprietà progetto, scheda Compila, impostazione compilatore avanzato.).

  • Debug di una vecchia versione del codice dopo che una nuova versione non è riuscita a creare a causa di errori di compilazione.

Ma posso rispondere "No" a ogni elemento in questo elenco.

Prima funzionava, ma diversi giorni fa ha smesso di funzionare e non so quale potrebbe essere la ragione.


2
Stai eseguendo in modalità di rilascio? Stai usando X64?
Sam Saffron

Il metodo che stai cercando di fare E&C è davvero breve? forse è stato integrato (anche se penso che l'inlining non avvenga durante il debug)
Sam Saffron,

Non funziona con nessun metodo, né molto breve né molto lungo.
nightcoder

Hai già provato un'installazione di riparazione?
Richard Anthony Hein

3
Credo di dover aggiungere che E&C è una caratteristica piuttosto complessa. La matrice di test del debugger è enorme e far funzionare E&C in ogni combinazione sarebbe estremamente difficile. Ma è anche una caratteristica molto importante, quindi abbiamo assunto molte limitazioni per assicurarci che venisse distribuito. All'interno dei vincoli deliberati che abbiamo imposto, è una delle funzionalità di altissima qualità che abbiamo fornito.
Jay Bazuzi

Risposte:


21

Finalmente sono riuscito a risolvere il problema: DISINSTALLA Gallio

Gallio sembra avere molti bordi irregolari ed è meglio non usare MbUnit 3.0 ma usare il framework MbUnit 2.0 ma usare il gallio runner, che stai eseguendo senza installare dall'installer (che ha anche installato un plugin di visual studio).

Per inciso, ho avuto il problema anche dopo aver "disabilitato" il plugin Gallio. Solo la disinstallazione ha risolto il problema.

PS. Modificato da nightcoder:
Nel mio caso la disabilitazione di TypeMock Isolator ( mocking framework) ha finalmente aiutato ! Modifica e continua ora funziona !!!

Ecco la risposta dal supporto di TypeMock:

Dopo aver esaminato ulteriormente il problema di modifica e continuazione e averne parlato con Microsoft, siamo giunti alla conclusione che non può essere risolto per Isolator. Isolator implementa un profiler CLR e, secondo la nostra ricerca, una volta abilitato e collegato un profiler CLR, la modifica e la continuazione vengono disabilitate automaticamente. Mi dispiace dire che questo non è più considerato un bug, ma piuttosto una limitazione di Isolator.


69

Altre soluzioni applicabili

Di seguito è riportato un elenco incompleto e non ordinato di possibili soluzioni da provare se * stai tentando di correggere rapidamente Modifica e continua.

  • Assicurati di essere in modalità debug
  • Assicurati di non avviare un processo in modalità mista
  • Prova a impostare la destinazione della CPU su x86 anziché su AnyCPU (su macchine x64)
  • Deseleziona la casella di controllo Ottimizza codice per Modalità debug in Proprietà progetto-> Debug
  • Deseleziona Abilita ottimizzazioni nelle impostazioni avanzate del compilatore
  • (ASP.NET) Controlla la risposta di nightcoder se è il caso
  • (ASP.NET) Controlla questa risposta (per matrixugly) se è il caso
  • (ASP.NET) Assicurati di aver abilitato Modifica e Continua nella scheda Web (vs2010)
  • (ASP.NET) Vai a Proprietà> Web> Server e assicurati che Abilita e continua sia selezionato in Usa Visual Studio Development Server .
  • (ASP.NET WebAPI) Assicurati di esserti fermato nel metodo del controller utilizzando un punto di interruzione, prima di provare a modificarlo.
  • (vs2017) Vai su Strumenti> Opzioni> Debug e deseleziona (deseleziona) "Modifica e continua". Questo è in realtà l'opposto del consiglio "convenzionale" (vedi alcuni altri punti in questo post). Non ti permette di apportare effettivamente modifiche al tuo programma in esecuzione (cioè non scambia a caldo le modifiche al codice che fai) - ti permette semplicemente di modificare il tuo codice (cioè impedisce quel fastidioso messaggio e "bloccare" il tuo editor ).
  • Vai su Strumenti> Opzioni> Debug> Generale e assicurati che Richiedi file sorgente per corrispondere esattamente alla versione originale sia deselezionato.
  • Seleziona Abilita allocatore heap di debug di Windows (solo nativo) [VS Community 2017]
  • Stai usando Microsoft Fakes? Inibisce Modifica e continua.
  • Uccidi tutte le istanze * .vshost.exe selezionando Termina albero processo nel Task Manager . VS rigenererà un'istanza corretta.
  • Rimuovi tutti i punti di interruzione con Debug-> Elimina tutti i punti di interruzione
  • Abilita e continua esiste sia nel menu Strumenti> Opzioni> Debug che nelle Impostazioni progetto . Assicurati di controllare entrambi i posti. Modifica e continua non è supportato con l'impostazione Intellitrace estesa.
  • Assicurati che le informazioni di debug in Proprietà progetto> Compila> Avanzate> Output> Informazioni di debug siano impostate su Completo
  • Alcuni plugin potrebbero interferire. Verificare disabilitando / disinstallando e quindi riprovando le altre soluzioni.
  • Se non stai prestando abbastanza attenzione, l'errore che ricevi durante il tentativo di risolvere questo problema potrebbe cambiare in qualcos'altro che è più facile da diagnosticare. Ad esempio, un metodo contenente un'espressione lambda non può supportare la modifica e la continuazione.
  • Assicurati che la variabile di sistema COR_ENABLE_PROFILINGnon sia impostata su 1. Alcuni profiler lo impostano durante l'installazione e lo lasciano così dopo la disinstallazione. Apri un prompt dei comandi e digita setper verificare rapidamente che il tuo sistema sia interessato, in tal caso rimuovi la variabile o impostala su 0:

    • In Windows 8 e versioni successive, cerca Sistema (Pannello di controllo).
    • Fare clic sul collegamento Impostazioni di sistema avanzate .
    • Fare clic su Variabili d'ambiente .
    • Rimuovere COR_ENABLE_PROFILING
  • Fai attenzione agli scenari non supportati (come riportato nella domanda) e alle modifiche non supportate .


* con "tu", intendo il visitatore della pagina che sta martellando la testa su una tastiera per trovare la soluzione.


Sentiti libero di modificare questa risposta per aggiungere la tua soluzione alternativa se non è elencata qui!


5
Era il COR_ENABLE_PROFILING ... non ho idea del motivo per cui è stato impostato. Grazie. Smettila di battere la testa sulla tastiera adesso.
Florian Lagg

2
Ho provato tutto ma ha funzionato. Poi ho capito che dovevo essere in modalità break (debug-> break all) o in un punto di interruzione. Per favore aggiungilo alla tua lista. msdn.microsoft.com/en-us/library/7932e88z.aspx
Niloofar

1
Per me funziona, grazie, la quarta riga "Deseleziona la casella di controllo Ottimizza codice per la modalità di debug in Proprietà progetto-> Debug"
Aljohn Yamaro

2
L'unica cosa che lo ha risolto per me non è menzionata qui: ho dovuto disabilitare (deselezionare) l'opzione "Abilita modifica e continua" in Strumenti> Opzioni> Debug. Questo è esattamente l'opposto di quello che penseresti intuitivamente, ma questo è ciò che mi ha risolto (cioè ha impedito quel fastidioso messaggio e lasciami modificare il mio codice).
leo

1
@leo È un wiki della comunità in modo da poter modificare liberamente. Il pulsante "modifica" non funziona per te? Vedo che hai abbastanza reputazione per farlo. Ps. Ho aggiunto un riferimento alla tua risposta quindi c'è meno dispersione.
beppe9000

23

Se stai eseguendo il debug di un'applicazione ASP.NET, vai a proprietà> web> Server e assicurati che "abilita e continua" sia selezionato in Usa Visual Studio Development Server.


3
è inoltre necessario premere Pausa durante il debug, quindi in grado di modificare il codice
Alexey Obukhov

Se utilizzo l'IIS locale, "abilita e continua" è disattivabile
Khoshtarkib

11

Ho avuto lo stesso problema. Ho anche reinstallato VS 2008 ma il problema non è andato via. Tuttavia, quando ho eliminato tutti i punti di interruzione, ha iniziato a funzionare.

Debug->Delete All Breakpoints

Penso che stesse accadendo perché avevo eliminato una pagina aspx che aveva punti di interruzione nel suo codice e quindi ho creato un'altra pagina con lo stesso nome. Questo probabilmente ha confuso il VS 2008.


5

Un paio di cose da controllare

  • Assicurati che la tua compilazione sia impostata su Debug vs. Release
  • Assicurati di non avviare un processo in modalità mista
  • Se su una macchina a 64 bit, assicurarsi di impostare la destinazione della CPU su x86 anziché su AnyCPU

MODIFICARE

Non credo che questo dovrebbe importare, ma assicurati che il processo di hosting sia abilitato per la piattaforma di destinazione. Probabilmente non aiuterà.

Se viene riprodotto per nuovi progetti, potrebbe essere qualcosa di ancora più sottile. Proverei quanto segue.

  • Backup HKCU: \ Software \ Wow6432Node \ VisualStudio \ 9.0 (forse rinominalo)
  • Elimina la stessa chiave
  • Prova di nuovo la riproduzione

2
Cos'è un processo in modalità mista? Ho anche provato il nuovo progetto winforms.
nightcoder

Non ho HKCU: \ Software \ Wow6432Node \ node
nightcoder

@nightcoder quindi prova HKCU: \ Software \ Microsoft \ VisualStudio \ 9.0
JaredPar

5

Nessuna delle soluzioni di cui sopra ha funzionato per me (in esecuzione su una macchina 64x).

Alla fine ho fatto clic su 'advanced compiler settings'e NON CONTROLLATO 'enable optimizations e ora posso scorrere il codice e modificarlo durante il debug.


2
Questo sembra essere solo Visual Basic: msdn.microsoft.com/en-us/library/07bysfz2%28v=vs.100%29.aspx
Marcel

Per me va bene! VS2013, VB.Net, Frame 3.5
MiBol

1
E dove sono queste impostazioni?
vapcguy

5

"Modifica e continua", quando abilitato, ti consentirà di modificare il codice solo quando è in modalità di interruzione: ad esempio, facendo mettere in pausa l'esecuzione da un'eccezione o premendo un punto di interruzione.

Ciò implica che non puoi modificare il codice quando l'esecuzione non è in pausa! Quando si tratta di debug di progetti Web (ASP.NET), ciò non è molto intuitivo, poiché spesso si desidera apportare modifiche tra le richieste. In questo momento, il codice (probabilmente) il tuo debug non è in esecuzione, ma non è nemmeno in pausa!
Per risolvere questo problema, puoi fare clic su "Rompi tutto" (o premere Ctrl+ Alt+ Break). In alternativa, imposta un punto di interruzione da qualche parte (ad esempio nel tuo Page_Loadevento), quindi ricarica la pagina in modo che l'esecuzione si interrompa quando raggiunge il punto di interruzione e ora puoi modificare il codice. Anche il codice nei .csfile.


4

Per me, per un motivo che non capisco, l'impostazione "Genera informazioni di debug" nelle "Impostazioni avanzate del compilatore" era impostata su "solo pdb" invece di "Completo".

Per impostazione predefinita, questo parametro è sempre impostato su "Completo" ma un misterioso poltergeist ha modificato questo parametro la scorsa notte. :)

PS Sono in Visual Basic .Net con Visual Studio 2010


4

Se il tuo problema riguarda un'app ASP.NET, assicurati di aver abilitato la modifica e la continuazione nella scheda Web (vs2010). C'era anche un'impostazione separata per il debug di ASP.NET nelle versioni precedenti.

Saluti,

Adamo.


4

Ho scoperto che anche se nelle proprietà del progetto la scheda build e debug sono impostate su Debug e tutte le altre impostazioni sono corrette, ricevo ancora il messaggio, tuttavia dopo aver scavato ancora nel menu Build seleziona Configurations Manager ... e assicurati che Debug sia selezionato in due posti anche lì. vai a capire ... quanti posti diversi hanno bisogno per impostare il debug ?????? anche se hai impostato Project - Configuration su Debug, quindi in Build - Manager non viene modificato, quindi devi modificare la stessa impostazione anche lì Configurazione progetto - sembra di nuovo un problema di Microsoft .......


4

Questo problema è dovuto all'impostazione di Intellitrace

Se Intellitrace è abilitato, assicurati che sia selezionato solo l'evento Intellitrace

In caso contrario, ciò non consentirà la modifica e continuerà ..

Se farai clic sulle opzioni di Intellitrace vedrai gli avvisi.


Questo è il problema, per me!
beppe9000

Ho cercato "Intellitrace" in tutte le opzioni in Visual Studio Tools e non esiste alcuna opzione del genere in VS Community 2017. Un po 'più di dettagli qui aiutano.
vapcguy

4

Le riprese successive mi hanno aiutato a usare VS2010:

vai su Strumenti, Opzioni, Debug, Generale e assicurati che "Richiedi che i file di origine corrispondano esattamente alla versione originale" sia deselezionato.


3

Ciò accade quando il debugger non ha raggiunto un punto di interruzione o non si è premuto Break All (pausa). Non potrebbe essere così semplice, vero?


Succede quando il debugger ha raggiunto un punto di interruzione e sto cercando di modificare qualcosa nel codice.
nightcoder

3

L'errore dice che una possibile causa è: "il codice in fase di debug è stato ottimizzato in fase di compilazione o esecuzione". Vai a Proprietà progetto-> Debug e deseleziona la casella Ottimizza codice per la modalità di debug.


3

Ho avuto questo problema in Microsoft Visual Studio 2008 e la soluzione è semplice. quando esegui il tuo progetto, imposta la modalità "Debug" non "Rilascio". La soluzione per un'altra persona può essere utile.


2

Se creo un nuovo progetto, le modifiche durante il debug non funzionano. Se creo un nuovo sito Web, le modifiche durante il debug funzionano come previsto.


1

Nel mio caso è sufficiente ripristinare le impostazioni predefinite del debugger e impostare IntelliTrace-> solo eventi intellytrace


1

Alcune cose che sembravano aiutare a usare VS2010:

  • vai su Strumenti, Opzioni, Debug, Generale e assicurati che "Richiedi che i file di origine corrispondano esattamente alla versione originale" sia deselezionato.
  • più istanze .vshost.exe possono essere lasciate, ad esempio, dallo scollegamento del debugger VS da un processo interrotto. Ciò interferirà anche con i punti di interruzione e le compilazioni. Utilizzare Task Manager, scheda Processi per terminare tutte le istanze di .vshost.exe facendo clic con il pulsante destro del mouse su ciascuna istanza e selezionando Termina albero processo. VS creerà una nuova istanza.

1

Ho rimosso un set di dati dal mio progetto perché non l'ho utilizzato. Dopodiché potrei modificare il programma durante il debug.


1

Ho apportato tutte le modifiche menzionate in ogni altra risposta e nessuna ha funzionato. Cosa ho imparato? Abilita e continua esiste sia nel menu Strumenti> Opzioni> Debug che nelle impostazioni del progetto. Dopo aver controllato entrambi, Abilita e Continua hanno funzionato per me.


3
Quali impostazioni del progetto? Sei troppo vago
Adaptabi

@Adaptabi Significava che se fai clic con il pulsante destro del mouse sul nome del progetto, fai clic su Proprietà, quindi (se si tratta di un progetto Web) fai clic su Web, c'è una casella di controllo per assicurarti che sia spuntata "Abilita modifica e continua" lì.
vapcguy

1

Mi sono imbattuto in questo oggi: risulta che avere le informazioni di debug impostate su solo pdb (o nessuno, immagino) impedirà a Modifica e Continua di funzionare.

Assicurati prima di tutto che le tue informazioni di debug siano "complete"!

Proprietà progetto> Genera> Avanzate> Output> Informazioni di debug


1

Sembra illogico, ma l'unico modo era disabilitare la modifica e continuare dalle opzioni di VS 2017 ... Quindi la modifica di AspNet e continuare hanno iniziato a funzionare ...


Esattamente! È controintuitivo, ma quello che ha funzionato anche per me è stato disabilitare "modificare e continuare". Non "sostituirà a caldo" le modifiche apportate, ma almeno puoi semplicemente modificare il tuo codice, e quindi avrà effetto al riavvio dell'app.
leo

1

quello che ha funzionato per me è stato deselezionare "Usa modalità di compatibilità gestita" sotto

Strumenti -> Opzioni -> Debug

TBN: selezionare o deselezionare "Richiedi file sorgente per corrispondere esattamente alla versione originale" sembra non influire su E&C

Spero che questo possa aiutare.


1

Abilita modifica e Continua solo il lavoro con IIS Express. Non lavorare in ISS locale o host esterno.


1

Ho avuto questo fastidioso problema da quando ho aggiornato il mio VS 2019 alla 16.4.3 e mi ha causato molto mal di testa.
Alla fine ho risolto il problema in questo modo:

1. Interrompi il debug
2. Seleziona la soluzione da "Esplora soluzioni"
3. Nella finestra Proprietà cambia la proprietà "Configurazione attiva" da "Rilascia | Qualsiasi CPU" a "Debug | Qualsiasi CPU"
4 In Debug> Opzioni> Generale seleziona la casella di controllo Modifica e continua

che ha funzionato per me, e spero che funzioni anche per te.



0

L'ho fatto accadere in un file di classe collegato. Il resto del progetto ha consentito E&C, ma ho ricevuto lo stesso errore durante la modifica del file collegato. La soluzione era suddividere il file collegato nel proprio progetto e fare riferimento al progetto.


0

Ho affrontato lo stesso problema. Il mio problema era che potevo modificare un file, ma non un altro (entrambi sono nello stesso progetto). Successivamente ho scoperto che il file che non potevo modificare faceva anche parte di un altro progetto. Che un altro progetto (Unit Test) non è stato caricato e il debugger VS intelligente mostra l'errore che l'assembly per questo determinato file non è stato caricato e le modifiche non sono consentite. Che strano!

Quindi, ho dovuto scaricare il progetto di unit test e continuare il debug di EnC.


0

Avevo un progetto di database nella soluzione che ha impedito la modifica del progetto webforms.

Ho cliccato su "Unload" sul progetto del database e ora tutto funziona dolcemente.


0

Per VS2017 può aiutare a rimuovere il file .suo nella tua soluzione, ha funzionato per me. :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.