Delen via


Runtime-specifieke apps zijn niet langer zelfstandig

Runtimespecifieke apps of .NET-apps met een RuntimeIdentifier, zijn niet meer standaard zelfstandig . In plaats daarvan zijn ze standaard afhankelijk van het framework.

Dit is een belangrijke wijziging in de volgende situaties:

  • Als u uw app hebt geïmplementeerd, gedistribueerd of gepubliceerd en de SelfContained eigenschap niet expliciet hebt toegevoegd, maar ook niet vereist dat de .NET-runtime op de computer wordt geïnstalleerd, zodat deze werkt. In dit geval hebt u mogelijk gebruik gemaakt van het vorige gedrag om standaard een zelf-ingesloten app te produceren.
  • Als u afhankelijk bent van het hulpprogramma IL Link. In dit geval voert u de stappen uit die worden beschreven onder Aanbevolen actie om IL Link opnieuw te gebruiken.

Vorig gedrag

Als eerder een runtime-id (RID) is opgegeven (via RuntimeIdentifier), is de app gepubliceerd als zelfstandig, zelfs als SelfContained deze niet expliciet is opgegeven.

Aanvullend:

  • Als PublishSelfContained dit niet expliciet is ingesteldfalse, worden de publicatie-eigenschappen PublishSingleFile geïmpliceerd RuntimeIdentifier en PublishAot daarom SelfContained (als deze niet is opgegeven) tijdens bewerkingen, waaronder dotnet build, dotnet restoreen dotnet publish.
  • Het PublishTrimmed pand impliceerde SelfContainedniet .
  • De PublishReadyToRun eigenschap die wordt geïmpliceerd SelfContained als SelfContained deze niet is opgegeven.

Nieuw gedrag

Vanaf .NET 8 betekent SelfContained dit niet meer standaard voor apps die zijn gericht op .NET 8 of een latere versieRuntimeIdentifier. In plaats daarvan zijn apps die een runtime-id opgeven, standaard afhankelijk van de .NET-runtime (frameworkafhankelijk). Apps waarop .NET 7 of eerdere versies zijn gericht, worden niet beïnvloed.

Aanvullend:

  • Als PublishSelfContained dit niet expliciet is ingesteld, impliceren SelfContained de publicatie-eigenschappen PublishAotPublishSingleFile (als deze niet zijn opgegevenfalse) alleen tijdens dotnet publish (dat wil zeggen, niet voor dotnet build ofdotnet restore).
  • De PublishTrimmed eigenschap impliceert SelfContained nu ook tijdens dotnet publish.
  • De PublishReadyToRun eigenschap impliceert SelfContained niet meer als het project is gericht op .NET 8 of hoger.

Notitie

Als u publiceert met behulp msbuild /t:Publish van en u wilt dat uw app zelfstandig is, moet u expliciet opgeven SelfContained, zelfs als uw project een van de vermelde publicatie-eigenschappen heeft.

Versie geïntroduceerd

.NET 8 Preview 5

Type wijziging die fouten veroorzaken

Deze wijziging kan van invloed zijn op de broncompatibiliteit en binaire compatibiliteit.

Reden voor wijziging

  • Het nieuwe .NET SDK-gedrag is afgestemd op het gedrag van Visual Studio.
  • Frameworkafhankelijke apps zijn standaard kleiner, omdat er geen kopieën van .NET zijn opgeslagen in elke app.
  • Wanneer .NET buiten de app wordt beheerd (voor frameworkafhankelijke implementaties), blijft .NET veiliger en up-to-date. Apps die hun eigen exemplaar van de runtime hebben, krijgen geen beveiligingsupdates. Deze wijziging maakt standaard meer frameworkafhankelijke apps.
  • Idealiter zijn opdrachtregelopties orthogonaal. In dit geval ondersteunt de tooling zowel RID-specifieke zelf-ingesloten implementatie (SCD) als RID-specifieke frameworkafhankelijke implementatie (FDD). Het was dus niet logisch dat er geen RID standaard is ingesteld op FDD en RID naar SCD. Dit gedrag was vaak verwarrend voor gebruikers.

.NET 6 waarschuwde gebruikers voor deze belangrijke wijziging met de volgende waarschuwing:

waarschuwing NETSDK1179: er is een van de opties '--zelfstandige' of '--no-self-contained' vereist wanneer '--runtime' wordt gebruikt.

Nu klanten expliciet hebben kunnen toevoegen SelfContained , is het goed om de onderbreking te introduceren.

  • Als u .NET 7 of een eerdere versie gebruikt en afhankelijk bent van het vorige gedrag dat SelfContained is afgeleid, ziet u deze waarschuwing:

    Voor projecten met TargetFrameworks >= 8.0 geeft RuntimeIdentifier geen SelfContained-app meer automatisch. Als u wilt doorgaan met het maken van een onafhankelijke .NET Framework-app na een upgrade naar 8.0, kunt u SelfContained expliciet instellen.

    Volg de richtlijnen van de waarschuwing en declareer uw app als zelfstandig. U kunt dat doen in het projectbestand of als opdrachtregelargument, bijvoorbeeld dotnet publish --self-contained.

  • Als u .NET 8 gebruikt en het vorige gedrag wilt behouden, moet u deze op dezelfde manier instellen SelfContainedtrue als eerder beschreven.

Eigenschap projectbestand instellen

SelfContained is een MSBuild-eigenschap die u kunt invoegen in uw projectbestand. Dit is een bestand met de extensie .csproj, .vbproj of .fsproj . Stel de eigenschap als volgt in:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <SelfContained>true</SelfContained>
  </PropertyGroup>
</Project>

Zie ook