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:
- När du kör ett SDK-kommando använder SDK den senaste installerade versionen.
- När du skapar en sammansättning definierar målramverksmonikers API:er för byggtid.
- När du kör ett .NET-program målramverksberoende appar.
- När du publicerar ett fristående program, inkluderar fristående distributioner den valda körtiden.
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:
-
dotnet
söker efter en global.json fil som iterativt omvänt navigerar sökvägen uppåt från den aktuella arbetskatalogen. -
dotnet
använder SDK:et som anges i den första global.json som hittas. -
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.0
och 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 dotnet
vä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:
- Programmet anger att 5.0 krävs.
- Vid körning är version 5.0.* inte installerad, men 5.1.0 är det. Version 5.1.0 används.
- 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:
Inställning på projektnivå genom att ange egenskapen
<RollForward>
:<PropertyGroup> <RollForward>LatestMinor</RollForward> </PropertyGroup>
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ällningenrollForward
. 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" } } }
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
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:
- Först utvärderas
*.runtimeconfig.json
konfigurationsfilen. - Därefter beaktas
DOTNET_ROLL_FORWARD
miljövariabeln, vilket åsidosättar den tidigare kontrollen. - 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 RuntimeFrameworkVersion
exakt körningsramverksversion. För ramverksberoende program anger RuntimeFrameworkVersion
den lägsta nödvändig körningsramverksversion.