Dela via


Körningsspecifika appar är inte längre fristående

Körningsspecifika appar, eller .NET-appar med ett RuntimeIdentifier, är inte längre fristående som standard. I stället är de ramverksberoende som standard.

Detta är en avgörande förändring i följande situationer:

  • Om du har distribuerat, delat eller publicerat appen och inte uttryckligen lagt till egenskapen SelfContained, men inte heller kräver att .NET-runtime 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 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 innebar inte SelfContained.
  • Egenskapen PublishReadyToRun antydde SelfContained om SelfContained den inte angavs.

Nytt beteende

Från och med .NET 8, för appar som är avsedda för .NET 8 eller en senare version, innebär RuntimeIdentifier inte längre SelfContained som standard. Appar som anger en runtime-identifierare är som standard beroende av .NET runtime (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 att publiceringsegenskaperna PublishSingleFile och PublishAot uppfattas som SelfContained (ifall det är ospecificerat) endast under dotnet publish (det vill säga, 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.

Anmärkning

Om du publicerar med msbuild /t:Publish och vill att din app ska vara fristående, måste du uttryckligen ange SelfContained, även om ditt projekt har någon av de listade publiceringsegenskaper.

Version lanserad

Förhandsversion 5 av .NET 8

Typ av brytande ändring

Den här ändringen kan påverka källkompatibilitet och binär kompatibilitet.

Orsak till ändring

  • 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 up-to-date. Appar som har en egen kopia av körtiden 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 standardiserats som FDD och RID standardiserades som SCD. Det här beteendet var ofta förvirrande för användarna.

.NET 6 uppmärksammade användarna på denna breaking change med följande meddelande:

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 explicit lägga till SelfContained, är det okej att introducera pausen.

  • Om du använder .NET 7 eller en tidigare version och förlitade dig på det tidigare beteendet där SelfContained antogs, kommer du att få 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