Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 een zelfvoorzienende app standaard 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
Indien eerder een runtime-identifier (RID) is opgegeven (via RuntimeIdentifier), werd de app gepubliceerd als zelfstandig uitvoerbaar, zelfs als SelfContained
niet expliciet was opgegeven.
Bovendien:
- Als
PublishSelfContained
niet expliciet is ingesteld opfalse
, impliceren de publicatie-eigenschappenPublishSingleFile
enPublishAot
eenRuntimeIdentifier
en daarom ookSelfContained
(als dit niet is opgegeven) tijdens operaties zoalsdotnet build
,dotnet restore
endotnet publish
. - De
PublishTrimmed
eigenschap impliceerdeSelfContained
niet. - De
PublishReadyToRun
eigenschap impliceerdeSelfContained
alsSelfContained
niet is opgegeven.
Nieuw gedrag
Vanaf .NET 8 impliceert RuntimeIdentifier
niet meer standaard SelfContained
voor apps die zijn gericht op .NET 8 of een latere versie. 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.
Bovendien:
- Als
PublishSelfContained
niet expliciet is ingesteld opfalse
, impliceren de publicatie-eigenschappenPublishSingleFile
enPublishAot
nuSelfContained
(als dit niet is opgegeven) 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.
Opmerking
Als u met msbuild /t:Publish
publiceert en u wilt dat uw app zelfstandig draait, moet u expliciet SelfContained
aangeven, zelfs als uw project een van de opgesomde publicatiekenmerken heeft.
Geïntroduceerde versie
.NET 8 Preview 5
Type van brekende verandering
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 (dat wil gezegd, 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 meer apps bij voorbaat frameworkafhankelijk.
- 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 geen RID standaard op FDD stond en RID standaard op SCD. Dit gedrag was vaak verwarrend voor gebruikers.
.NET 6 waarschuwde gebruikers voor deze belangrijke wijziging met de volgende waarschuwing:
waarschuwing NETSDK1179: een van de opties '--self-contained' of '--no-self-contained' is vereist wanneer '--runtime' wordt gebruikt.
Nu klanten de tijd hebben gehad om SelfContained
expliciet toe te voegen, is het goed om de onderbreking te introduceren.
Aanbevolen actie
Als u .NET 7 of een eerdere versie gebruikt en vertrouwde op het vorige gedrag waarbij
SelfContained
werd afgeleid, dan krijgt u deze waarschuwing te zien: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.
Projectbestandseigenschap 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>