Runtimespezifische Apps nicht mehr eigenständig
Runtimespezifische Apps oder .NET-Apps mit einem RuntimeIdentifier
sind standardmäßig nicht mehr eigenständig. Stattdessen sind sie standardmäßig frameworkabhängig.
Dies ist ein Breaking Change in den folgenden Situationen:
- Wenn Sie Ihre App bereitgestellt, verteilt oder veröffentlicht haben und die
SelfContained
-Eigenschaft nicht explizit hinzugefügt haben, aber auch nicht erforderlich war, dass die .NET-Runtime auf dem Computer installiert ist, damit sie funktioniert. In diesem Fall haben Sie sich möglicherweise auf das vorherige Verhalten verlassen, um standardmäßig eine eigenständige App zu erstellen. - Wenn Sie sich auf das IL Link-Tool verlassen. Führen Sie in diesem Fall die unter Empfohlenen Aktion beschriebenen Schritte aus, um IL Link erneut zu verwenden.
Vorheriges Verhalten
Wenn zuvor ein Runtimebezeichner (RID) (über RuntimeIdentifier) angegeben wurde, wurde die App als eigenständig veröffentlicht, auch wenn SelfContained
nicht explizit angegeben wurde.
Zusätzlich:
- Wenn
PublishSelfContained
nicht explizit auffalse
festgelegt wurde, implizierten die VeröffentlichungseigenschaftenPublishSingleFile
undPublishAot
einenRuntimeIdentifier
und daherSelfContained
(wenn nicht angegeben wurde) bei Vorgängen wiedotnet build
,dotnet restore
unddotnet publish
. - Die
PublishTrimmed
-Eigenschaft implizierteSelfContained
nicht. - Die
PublishReadyToRun
-Eigenschaft implizierteSelfContained
, wennSelfContained
nicht angegeben wurde.
Neues Verhalten
Ab .NET 8 impliziert RuntimeIdentifier
für Apps, die .NET 8 oder eine höhere Version als Ziel verwenden, SelfContained
standardmäßig nicht mehr. Stattdessen sind Apps, die einen Runtimebezeichner angeben, standardmäßig von der .NET-Runtime abhängig (frameworkabhängig). Apps, die auf .NET 7 oder frühere Versionen ausgerichtet sind, sind nicht betroffen.
Zusätzlich:
- Wenn
PublishSelfContained
nicht explizit auffalse
festgelegt ist, implizierenPublishSingleFile
die VeröffentlichungseigenschaftenPublishAot
undSelfContained
jetzt (sofern nicht angegeben) nur währenddotnet publish
(d. h. nicht fürdotnet build
oderdotnet restore
). - Die
PublishTrimmed
-Eigenschaft impliziertSelfContained
jetzt auch währenddotnet publish
. - Die
PublishReadyToRun
-Eigenschaft impliziertSelfContained
nicht mehr, wenn das Projekt auf .NET 8 oder höher ausgerichtet ist.
Hinweis
Wenn Sie msbuild /t:Publish
für die Veröffentlichung verwenden und Ihre App eigenständig sein soll, müssen Sie SelfContained
explizit angeben, auch wenn Ihr Projekt über eine der aufgeführten Veröffentlichungseigenschaften verfügt.
Eingeführt in Version
.NET 8 Vorschauversion 5
Typ des Breaking Changes
Diese Änderung kann sich auf Quellkompatibilität und binäre Kompatibilität auswirken.
Grund für die Änderung
- Das neue Verhalten des .NET SDK entspricht dem Visual Studio-Verhalten.
- Frameworkabhängige Apps sind standardmäßig kleiner, da keine Kopien von .NET in jeder App gespeichert sind.
- Wenn .NET außerhalb der App (d. h. für frameworkabhängige Bereitstellungen) verwaltet wird, bleibt .NET sicherer und aktueller. Apps, die über eine eigene Kopie der Runtime verfügen, erhalten keine Sicherheitsupdates. Durch diese Änderung sind standardmäßig mehr Apps frameworkabhängig.
- Im Idealfall sind Befehlszeilenoptionen orthogonal. In diesem Fall unterstützen die Tools sowohl die RID-spezifische eigenständige Bereitstellung (SCD) als auch die RID-spezifische frameworkabhängige Bereitstellung (FDD). Es war also nicht sinnvoll, dass kein RID standardmäßig FDD und ein RID standardmäßig SCD bedeutete. Dieses Verhalten war für Benutzer*innen oft verwirrend.
.NET 6 hat Benutzer*innen mit der folgenden Warnung vor diesem Breaking Change gewarnt:
Warnung NETSDK1179: Eine der Optionen „--self-contained“ oder „--no-self-contained“ ist erforderlich, wenn „--runtime“ verwendet wird.
Nachdem Kund*innen nun Zeit hatten, SelfContained
explizit hinzuzufügen, kann diese Änderung bedenkenlos eingeführt werden.
Empfohlene Maßnahme
Wenn Sie .NET 7 oder eine frühere Version verwenden und das vorherige Verhalten genutzt haben, bei dem
SelfContained
abgeleitet wurde, wird diese Warnung angezeigt:Für Projekte mit TargetFrameworks >= 8.0 gibt RuntimeIdentifier nicht mehr automatisch eine SelfContained-App an. Wenn Sie nach dem Upgrade auf 8.0 weiterhin eine .NET Framework-unabhängige App erstellen möchten, müssen Sie SelfContained explizit festlegen.
Befolgen Sie die Anleitungen der Warnung, und deklarieren Sie Ihre App als eigenständig. Sie können dies entweder in der Projektdatei oder als Befehlszeilenargument ausführen, z. B.
dotnet publish --self-contained
.Wenn Sie .NET 8 verwenden und das vorherige Verhalten beibehalten möchten, legen Sie
SelfContained
wie zuvor beschrieben auftrue
fest.
Festlegen der Projektdateieigenschaft
SelfContained
ist eine MSBuild-Eigenschaft, die Sie in die Projektdatei einfügen können, bei der es sich um eine Datei mit der Erweiterung .csproj, .vbproj oder .fsproj handelt. Legen Sie die Eigenschaft wie folgt fest:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<SelfContained>true</SelfContained>
</PropertyGroup>
</Project>