Dela via


Välj den .NET-version som ska användas

I den här artikeln beskrivs de principer som används av .NET-verktyg, SDK och körning för att välja versioner. Dessa principer ger en balans mellan att köra program med hjälp av de angivna versionerna och att göra det enkelt att uppgradera både utvecklar- och slutanvändardatorer. Dessa principer aktiverar:

  • Enkel och effektiv distribution av .NET, inklusive säkerhets- och tillförlitlighetsuppdateringar.
  • Använd de senaste verktygen och kommandona oberoende av målmiljö.

Versionsval sker:

Resten av det här dokumentet undersöker dessa fyra scenarier.

SDK använder den senaste installerade versionen

SDK-kommandon inkluderar dotnet new och dotnet run. .NET CLI måste välja en SDK-version för varje dotnet kommando. Den använder den senaste SDK:t som är installerad på datorn som standard, även om:

  • Projektet riktar sig mot en tidigare version av .NET-runtime.
  • Den senaste versionen av .NET SDK är en förhandsversion.

Du kan dra nytta av de senaste SDK-funktionerna och förbättringarna när du riktar in dig på tidigare .NET-körningsversioner. Du kan rikta in dig på olika körningsversioner av .NET med samma SDK-verktyg.

I vissa fall kan du behöva använda en specifik version av SDK:et. Du anger den versionen i en global.json fil.

global.json kan placeras var som helst i filhierarkin. Du styr vilka projekt som en viss global.json gäller för genom dess plats i filsystemet. .NET CLI söker efter en global.json fil som iterativt navigerar sökvägen uppåt från den aktuella arbetskatalogen (som inte nödvändigtvis är samma som projektkatalogen). Den första global.json filen som hittades anger vilken version som används. Om SDK-versionen är installerad används den versionen. Om SDK:t som anges i global.json inte hittas använder .NET CLI matchande regler för att välja en kompatibel SDK eller misslyckas om ingen hittas.

I följande exempel visas syntaxen för global.json:

{
  "sdk": {
    "version": "5.0.0"
  }
}

Processen för att välja en SDK-version är:

  1. dotnet söker efter en global.json fil som iterativt omvänt navigerar sökvägen uppåt från den aktuella arbetskatalogen.
  2. dotnet använder SDK:et som anges i den första global.json som hittas.
  3. dotnet använder den senaste installerade SDK:n om ingen global.json hittas.

Mer information om val av SDK-version finns i artikeln Matchningsregler och rollForward i artikeln global.json översikt.

Uppdatera SDK-versionen

Det är viktigt att uppdatera till den senaste versionen av SDK regelbundet för att använda de senaste funktionerna, prestandaförbättringarna och felkorrigeringarna. Om du enkelt vill söka efter uppdateringar av SDK:t använder du kommandot dotnet sdk check. Om du väljer en specifik version med hjälp av global.jsonbör du överväga ett verktyg som Dependabot för att automatiskt uppdatera den fästa SDK-versionen när nya versioner blir tillgängliga.

Ramverksmoniker definierar API:er för kompileringstid

Du bygger ditt projekt för API:er som definieras i ett målramverksnamn (TFM). Du specificerar målsystemet i projektfilen. Ange elementet TargetFramework i projektfilen enligt följande exempel:

<TargetFramework>net8.0</TargetFramework>

Du kan bygga ditt projekt mot flera TFM:er. Det är vanligare att ange flera målramverk för bibliotek, men det kan även göras med program. Du anger ett TargetFrameworks-attribut (plural av TargetFramework). Målramverken är semikolonavgränsade enligt följande exempel:

<TargetFrameworks>net8.0;net47</TargetFrameworks>

En viss SDK stöder en fast uppsättning ramverk som är begränsade till målramverket för den runtime som den skeppas med. Till exempel innehåller .NET 8 SDK .NET 8-runtime, som är en implementering av net8.0 målramverket. .NET 8 SDK stöder net7.0, net6.0och net5.0, men inte net9.0 (eller högre). Du installerar .NET 9 SDK för att bygga för net9.0.

.NET Standard

.NET Standard var ett sätt att rikta in sig på en API-yta som delas av olika implementeringar av .NET. Från och med lanseringen av .NET 5, som är en API-standard, har .NET Standard liten relevans, förutom ett scenario: .NET Standard är användbart när du vill rikta in dig på både .NET och .NET Framework. .NET 5 implementerar alla .NET Standard-versioner.

Mer information finns i .NET 5 och .NET Standard.

Vidareutveckling för ramverksberoende appar

När du kör ett program från källan med dotnet run, från en ramverksberoende distribution med dotnet myapp.dll, eller från en ramverksberoende körbar med myapp.exe, är den körbara dotnetvärd för programmet.

Värden väljer den senaste patchen som är installerad på datorn. Om du till exempel har angett net5.0 i projektfilen och 5.0.2 är den senaste installerade .NET-körningen används 5.0.2-körningen.

Om ingen godtagbar 5.0.* version hittas används en ny 5.* version. Om du till exempel har angett net5.0 och endast 5.1.0 har installerats körs programmet med hjälp av 5.1.0-körningen. Detta beteende kallas "mindre versionsframåtrullning." Lägre versioner kommer inte heller att övervägas. När ingen acceptabel körtidsmiljö är installerad, körs inte programmet.

Några användningsexempel visar beteendet om du riktar in dig på 5.0:

  • ✔️ 5.0 har angetts. 5.0.3 är den högsta installerade korrigeringsversionen. 5.0.3 används.
  • ❌ 5.0 har angetts. Inga 5.0.*-versioner är installerade. 3.1.1 är den senaste Runtime som är installerad. Ett felmeddelande visas.
  • ✔️ 5.0 har angetts. Inga 5.0.*-versioner är installerade. 5.1.0 är den högsta installerade körningsversionen. 5.1.0 används.
  • ❌ 3.0 har angetts. Inga 3.x-versioner är installerade. 5.0.0 är den högsta körtid som installerats. Ett felmeddelande visas.

Distribution av delversioner har en bieffekt som kan påverka slutanvändarna. Tänk på följande scenario:

  1. Programmet anger att 5.0 krävs.
  2. Vid körning är version 5.0.* inte installerad, men 5.1.0 är det. Version 5.1.0 används.
  3. Senare installerar användaren 5.0.3 och kör programmet igen, 5.0.3 används nu.

Det är möjligt att 5.0.3 och 5.1.0 fungerar annorlunda, särskilt för scenarier som serialisering av binära data.

Kontrollera framåt-rullande beteende

Innan du ändrar standardbeteendet för roll-forward bör du bekanta dig med nivån för .NET-körningskompatibilitet.

Roll-forward-beteendet för ett program kan konfigureras på fyra olika sätt:

  1. Inställning på projektnivå genom att ange egenskapen <RollForward>:

    <PropertyGroup>
      <RollForward>LatestMinor</RollForward>
    </PropertyGroup>
    
  2. Filen *.runtimeconfig.json.

    Den här filen skapas när du kompilerar programmet. Om egenskapen <RollForward> har angetts i projektet återges den i *.runtimeconfig.json-filen som inställningen rollForward. Användare kan redigera den här filen för att ändra programmets beteende.

    {
      "runtimeOptions": {
        "tfm": "net5.0",
        "rollForward": "LatestMinor",
        "framework": {
          "name": "Microsoft.NETCore.App",
          "version": "5.0.0"
        }
      }
    }
    
  3. dotnet-kommandots egenskap --roll-forward <value>.

    När du kör ett program kan du styra roll-forward-beteendet via kommandoraden:

    dotnet run --roll-forward LatestMinor
    dotnet myapp.dll --roll-forward LatestMinor
    myapp.exe --roll-forward LatestMinor
    
  4. Miljövariabeln DOTNET_ROLL_FORWARD.

Företräde

Beteendet för vidarebefordran anges i följande ordning när appen körs, och högre numrerade objekt har företräde framför lägre numrerade objekt:

  1. Först utvärderas *.runtimeconfig.json konfigurationsfilen.
  2. Därefter beaktas DOTNET_ROLL_FORWARD miljövariabeln, vilket åsidosättar den tidigare kontrollen.
  3. Slutligen åsidosätter varje --roll-forward-parametern som skickas till det körande programmet allt annat.

Värden

Men du ställer in inställningen för framåtrullning med något av följande värden för att ange beteendet:

Värde Beskrivning
Minor Standard om det inte anges.
Rulla vidare till den lägsta högre delversionen om den begärda delversionen saknas. Om den begärda delversionen finns används principen LatestPatch.
Major Rulla vidare till nästa tillgängliga högre huvudversion och lägsta delversion om den begärda huvudversionen saknas. Om den begärda huvudversionen finns används principen Minor.
LatestPatch Rulla vidare till den högsta korrigeringsversionen. Det här värdet inaktiverar uppgradering till nästa mindre version.
LatestMinor Rulla vidare till högsta delversion, även om den begärda delversionen finns.
LatestMajor Rulla vidare till högsta huvudversion och högsta underordnade version, även om begärd huvudversion redan finns tillgänglig.
Disable Rulla inte vidare, bind bara till den angivna versionen. Den här principen rekommenderas inte för allmän användning eftersom den inaktiverar möjligheten att rulla vidare till de senaste korrigeringarna. Det här värdet rekommenderas endast för testning.

Fristående distributioner inkluderar den valda körmiljön

Du kan publicera ett program som en fristående distribution. Den här metoden paketerar .NET-körningen och biblioteken med ditt program. Fristående distributioner är inte beroende av körmiljöer. Val av körningsversion sker vid publiceringstid, inte körningstid.

Den återställa händelse som inträffar när publiceringen väljer den senaste korrigeringsversionen av den angivna körningsfamiljen. Till exempel väljer dotnet publish .NET 5.0.3 om det är den senaste korrigeringsversionen i .NET 5-körningsfamiljen. Målramverket (inklusive de senaste installerade säkerhetskorrigeringarna) paketeras med programmet.

Ett fel uppstår om den lägsta version som angetts för ett program inte uppfylls. dotnet publish binder till den senaste körningskorrigeringsversionen (inom en viss major.minor-version). dotnet publish stöder inte roll-forward-semantiken för dotnet run. Mer information om patchar och fristående driftsättningar finns i artikeln om val av runtime-korrigeringar vid driftsättning av .NET-applikationer.

Fristående distributioner kan kräva en specifik korrigeringsversion. Du kan åsidosätta minimiversionen av runtime-patchen (till högre eller lägre versioner) i projektfilen, enligt följande exempel:

<PropertyGroup>
  <RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>

Elementet RuntimeFrameworkVersion åsidosätter standardversionsprincipen. För fristående distributioner anger RuntimeFrameworkVersionexakt körningsramverksversion. För ramverksberoende program anger RuntimeFrameworkVersion den lägsta nödvändig körningsramverksversion.

Se även