Dela via


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 till false, har publiceringsegenskaperna PublishSingleFile och PublishAot underförstått en RuntimeIdentifier och därför SelfContained (om den inte har angetts) under åtgärder som dotnet build, dotnet restoreoch dotnet publish.
  • Egenskapen PublishTrimmed antydde SelfContainedinte .
  • Egenskapen PublishReadyToRun underförstådd SelfContained om SelfContained 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 till false, innebär SelfContained publiceringsegenskaperna PublishSingleFile och PublishAot nu (om det inte anges) endast under dotnet publish (dvs. inte för dotnet build eller dotnet restore).
  • Egenskapen PublishTrimmed innebär SelfContained nu också under dotnet publish.
  • Egenskapen PublishReadyToRun innebär SelfContained 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.

  • 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 till true 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>

Se även