Dela via


Kodändringar som stöds (C# och Visual Basic)

Mekanismen Hot Reload, tidigare kallad "Edit and Continue", hanterar de flesta typer av kodändringar inom metodkroppar. De flesta ändringar utanför metodkroppar, och några ändringar i metodkroppar, kan dock inte tillämpas under felsökning. Om du vill tillämpa ändringarna som inte stöds måste du sluta felsöka och starta om med en ny version av koden.

Mekanismen Redigera och fortsätt hanterar de flesta typer av kodändringar i metodkroppar. De flesta ändringar utanför metodkroppar, och några ändringar i metodkroppar, kan dock inte tillämpas under felsökning. Om du vill tillämpa ändringarna som inte stöds måste du sluta felsöka och starta om med en ny version av koden.

Kodändringar som stöds

I följande tabell visas de ändringar som kan göras i C# och Visual Basic-kod under en felsökningssession utan att starta om sessionen.

Språkelement eller funktion Redigeringsåtgärd som stöds Begränsningar
Typer Lägg till metoder, fält, konstruktorer med mera Ja
Iteratorer Lägga till eller ändra Nej
async/await-uttryck Lägga till eller ändra Ja
Dynamiska objekt Lägga till eller ändra Nej
lambda-uttryck Lägga till eller ändra Ja
LINQ-uttryck Lägga till eller ändra Samma som lambda-uttryck
Generika Lägga till eller ändra Ja
Språkelement eller funktion Redigeringsåtgärd som stöds Begränsningar
Typer Lägg till metoder, fält, konstruktorer med mera Ja
Iteratorer Lägga till eller ändra Nej
async/await-uttryck Lägga till eller ändra Ja
Dynamiska objekt Lägga till eller ändra Nej
lambda-uttryck Lägga till eller ändra Ja
LINQ-uttryck Lägga till eller ändra Samma som lambda-uttryck

Not

Nyare språkfunktioner som stränginterpolation och null-villkorsstyrda operatorer stöds vanligtvis av Redigera och Fortsätt. För den mest aktuella informationen hittar du på sidan Redigeringar som stöds.

Förbättringar av .NET 6+

Förbättringar i .NET 6+ och Visual Studio 2022 och senare versioner omfattar stöd för fler typer av redigeringar som går utöver vad som ursprungligen var möjligt i äldre versioner av Visual Studio. De här förbättringarna är tillgängliga för både Hot Reload och upplevelserna Redigera och Fortsätt.

.NET 6+ Hot Reload-funktionen drivs av mekanismen Redigera och fortsätt och Roslyn. Redigeringar som stöds listar de typer av redigeringar som för närvarande stöds av Roslyn och potentiella framtida förbättringar.

Ändringar i kod som inte stöds

Följande ändringar kan inte tillämpas på C#- och Visual Basic-kod under en felsökningssession.

  • Ändringar i det aktuella uttalandet eller något annat aktivt uttalande.

    En aktiv instruktion är en instruktion i en funktion i anropsstacken som anropades för att komma till den aktuella instruktionen.

    Den aktuella uttalandet visas på en gul bakgrund i källfönstret. Andra aktiva instruktioner visas på en skuggad bakgrund och är skrivskyddade. Dessa standardfärger kan ändras i dialogrutan Alternativ.

  • Ändringar av kod efter språkelement som inte stöds enligt beskrivningen i följande tabell.

    Språkelement eller funktion Redigeringsåtgärden stöds inte
    Alla kodelement Döpa om
    Namnområden Addera
    Namnområden, typer, medlemmar Ta bort
    Gränssnitt Modifiera
    Typer Lägg till abstrakt eller virtuell medlem, lägg till åsidosättning (se information)
    Typer Lägg till destructor
    Medlemmar – Ändra en medlemsvariabel som refererar till en inbäddad interop-typ
    – Ändra en statisk medlem efter att den redan har åtkommits genom utförd kod
    Medlemmar (Visual Basic) – Ändra en medlem med instruktionen Vid fel eller Fortsätt
    – Ändra en medlem som innehåller en LINQ-frågesats för aggregering, gruppera efter, enkel koppling eller gruppkoppling
    Metoder – Ändra signaturer
    – Gör så att en abstrakt metod blir ickeabstract genom att lägga till en metodtext
    – Ta bort metodtext
    Attribut Lägga till eller ändra
    Händelser eller egenskaper Ändra en typparameter, bastyp, ombudstyp eller returtyp
    Operatorer eller indexerare Ändra en typparameter, bastyp, ombudstyp eller returtyp
    fångstblock Ändra när den innehåller en aktiv instruktion
    try-catch-finally-block Ändra när den innehåller en aktiv instruktion
    använda instruktioner Addera
    asynkrona metoder/lambdas Ändra en asynkron metod/lambda i ett projekt som riktar sig mot .NET Framework 4 och lägre (se detaljer)
    Iteratorer Ändra en iterator i ett projekt som är riktat mot .NET Framework 4 och tidigare (se information)
    Språkelement eller funktion Redigeringsåtgärden stöds inte
    Alla kodelement Byta namn
    Namnområden Addera
    Namnområden, typer, medlemmar Ta bort
    Generika Lägga till eller ändra
    Gränssnitt Modifiera
    Typer Lägg till abstrakt eller virtuell medlem, lägg till överskrivning (se detaljer)
    Typer Lägg till destructor
    Medlemmar – Ändra en medlem som refererar till en inbäddad interop-typ
    – Ändra en statisk medlem när den redan har använts genom att köra kod
    Medlemmar (Visual Basic) – Modifiera en medlem med instruktionen On Error eller Resume
    – Ändra en medlem som innehåller en LINQ-frågesats för aggregering, gruppera efter, enkel koppling eller gruppkoppling
    Metoder – Ändra signaturer
    – Gör så att en abstrakt metod blir ickeabstract genom att lägga till en metodtext
    – Ta bort metodtext
    Attributen Lägga till eller ändra
    Händelser eller egenskaper Ändra en typparameter, bastyp, ombudstyp eller returtyp
    Operatorer eller indexerare Ändra en typparameter, bastyp, ombudstyp eller returtyp
    catch blocks Ändra när den innehåller en aktiv instruktion
    try-catch-finally-block Ändra när den innehåller en aktiv instruktion
    använda satser Addera
    asynkrona metoder/lambdas Ändra en asynkron metod/lambda i ett projekt som riktar sig mot .NET Framework 4 och lägre (se detaljer)
    Iteratorer Ändra en iterator i ett projekt som är riktat mot .NET Framework 4 och tidigare (se information)

Osäker kod

Ändringar av osäker kod har samma begränsningar som ändringar av säker kod, med en extra begränsning: Redigera och Fortsätt stöder inte ändringar av osäker kod som avslutas inom en metod som innehåller stackalloc-operatorn.

Programstöd

Exempel på program som stöds är:

  • UWP-appar i Windows 10 eller Windows 11
  • x86- och x64-appar som riktar sig till .NET Framework 4.6 Desktop eller senare versioner (.NET Framework är endast en skrivbordsversion)

För .NET 6 och senare stöds redigering för följande filtyper:

  • .cshtml
  • .razor

Appar, plattformar och åtgärder som inte stöds

Program eller plattformar som inte stöds är:

  • F#
  • .NET Native
  • Silverlight 5
  • Windows 8.1
  • Xamarin.Forms (iOS och Android)

För ASP.NET och ASP.NET Core stöds inte redigering för följande filtyper:

  • .aspx
  • .ascx
  • .aspx
  • .ascx
  • .cshtml
  • .razor

Scenarier som inte stöds

Redigera och fortsätt är inte tillgängligt i följande felsökningsscenarier:

  • Felsökning i blandat läge (intern/hanterad).

  • Felsökning på Arm64 utan att rikta in sig på .NET 7 eller senare.

  • Felsökning med COR_ENABLE_PROFILING miljövariabeluppsättning.

  • Felsöka ett program med hjälp av koppla till process (Felsöka > Koppla till process) i stället för att köra programmet genom att välja Starta från menyn Debug. Om du vill använda Redigera och Fortsätt när du ansluter till en process måste COMPLUS_ForceENC miljövariabeln anges innan processen startas (set COMPLUS_ForceENC=1).

  • Felsökning med nondeterministiska (till exempel tidsbaserade) sammansättningsversioner. Om du vill använda Redigera och Fortsätt kan du överväga att endast ange versionen i Versionsversioner (eller CI) och hålla versionen i Felsökningsversioner konstant.

  • Felsöka optimerad kod.

  • SQL-felsökning.

  • Felsöka en dumpfil.

  • Felsöka en inbäddad runtime-applikation.

  • Felsöka en gammal version av koden efter att en ny version inte kunde skapas på grund av byggfel.