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-eigenschappenPublishSingleFile
geïmpliceerdRuntimeIdentifier
enPublishAot
daaromSelfContained
(als deze niet is opgegeven) tijdens bewerkingen, waaronderdotnet build
,dotnet restore
endotnet publish
. - Het
PublishTrimmed
pand impliceerdeSelfContained
niet . - De
PublishReadyToRun
eigenschap die wordt geïmpliceerdSelfContained
alsSelfContained
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, implicerenSelfContained
de publicatie-eigenschappenPublishAot
PublishSingleFile
(als deze niet zijn opgegevenfalse
) alleen tijdensdotnet publish
(dat wil zeggen, niet voordotnet build
ofdotnet restore
). - De
PublishTrimmed
eigenschap impliceertSelfContained
nu ook tijdensdotnet publish
. - De
PublishReadyToRun
eigenschap impliceertSelfContained
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.
Aanbevolen actie
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
SelfContained
true
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>