Körningsspecifika appar är inte längre fristående
Körningsspecifika appar, eller .NET-appar med en RuntimeIdentifier
, är inte längre fristående som standard. I stället är de ramverksberoende som standard.
Detta är en icke-bakåtkompatibel ändring i följande situationer:
- Om du har distribuerat, distribuerat eller publicerat appen och inte uttryckligen
SelfContained
lagt till egenskapen, men inte heller kräver att .NET-körningen installeras på datorn för att den ska fungera. I det här fallet kan du ha förlitat dig på det tidigare beteendet för att skapa en fristående app som standard. - Om du förlitar dig på IL Link-verktyget. I det här fallet vidtar du de steg som beskrivs under Rekommenderad åtgärd för att använda IL Link igen.
Tidigare beteende
Tidigare, om en körningsidentifierare (RID) angavs (via RuntimeIdentifier), publicerades appen som fristående, även om SelfContained
den inte uttryckligen angavs.
Dessutom:
- Om
PublishSelfContained
inte uttryckligen har angetts tillfalse
, har publiceringsegenskapernaPublishSingleFile
ochPublishAot
underförstått enRuntimeIdentifier
och därförSelfContained
(om den inte har angetts) under åtgärder somdotnet build
,dotnet restore
ochdotnet publish
. - Egenskapen
PublishTrimmed
antyddeSelfContained
inte . - Egenskapen
PublishReadyToRun
underförståddSelfContained
omSelfContained
den inte har angetts.
Nytt beteende
Från och med .NET 8, för appar som riktar in sig på .NET 8 eller en senare version, RuntimeIdentifier
innebär SelfContained
det inte längre som standard. Appar som anger en körningsidentifierare är i stället beroende av .NET-körningen som standard (ramverksberoende). Appar som riktar in sig på .NET 7 eller tidigare versioner påverkas inte.
Dessutom:
- Om
PublishSelfContained
inte uttryckligen anges tillfalse
, innebärSelfContained
publiceringsegenskapernaPublishSingleFile
ochPublishAot
nu (om det inte anges) endast underdotnet publish
(dvs. inte fördotnet build
ellerdotnet restore
). - Egenskapen
PublishTrimmed
innebärSelfContained
nu också underdotnet publish
. - Egenskapen
PublishReadyToRun
innebärSelfContained
inte längre om projektet riktar in sig på .NET 8 eller senare.
Kommentar
Om du publicerar med och msbuild /t:Publish
vill att din app ska vara fristående måste du uttryckligen ange SelfContained
, även om projektet har någon av publiceringsegenskaperna i listan.
Version introducerad
Förhandsversion 5 av .NET 8
Typ av icke-bakåtkompatibel ändring
Den här ändringen kan påverka källkompatibilitet och binär kompatibilitet.
Orsak till ändringen
- Det nya .NET SDK-beteendet överensstämmer med Visual Studio-beteendet.
- Ramverksberoende appar är som standard mindre eftersom det inte finns kopior av .NET som lagras i varje app.
- När .NET hanteras utanför appen (dvs. för ramverksberoende distributioner) förblir .NET säkrare och uppdaterat. Appar som har en egen kopia av körningen får inte säkerhetsuppdateringar. Den här ändringen gör fler appar ramverksberoende som standard.
- Helst är kommandoradsalternativ ortoggoniska. I det här fallet stöder verktygen både RID-specifik fristående distribution (SCD) och RID-specifik ramverksberoende distribution (FDD). Så det var inte meningsfullt att inget RID som standard är FDD och RID som standard till SCD. Det här beteendet var ofta förvirrande för användarna.
.NET 6 varnade användarna för den här icke-bakåtkompatibla ändringen med följande varning:
varning NETSDK1179: Ett av alternativen "--self-contained" eller "--no-self-contained" krävs när "--runtime" används.
Nu när kunderna har haft tid att lägga SelfContained
till explicit är det okej att introducera pausen.
Rekommenderad åtgärd
Om du använder .NET 7 eller en tidigare version och förlitade dig på det tidigare beteendet som
SelfContained
härleddes visas den här varningen:För projekt med TargetFrameworks >= 8.0 ger RuntimeIdentifier inte längre automatiskt en SelfContained-app. Om du vill fortsätta att skapa en oberoende .NET Framework-app efter uppgradering till 8.0 kan du överväga att ange SelfContained explicit.
Följ anvisningarna i varningen och deklarera din app som fristående. Du kan göra det antingen i projektfilen eller som ett kommandoradsargument, till exempel
dotnet publish --self-contained
.Om du använder .NET 8 och vill behålla det tidigare beteendet anger du
SelfContained
tilltrue
på samma sätt som tidigare beskrivits.
Ange project-file-egenskap
SelfContained
är en MSBuild-egenskap som du kan infoga i projektfilen, som är en fil som har filnamnstillägget .csproj, .vbproj eller .fsproj . Ange egenskapen på följande sätt:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<SelfContained>true</SelfContained>
</PropertyGroup>
</Project>