Das Veröffentlichen eines ReadyToRun-Projekts mit „-no-restore“ erfordert Änderungen bei der Wiederherstellung
Wenn Sie ein Projekt mit -p:PublishReadyToRun=true
zusätzlich zu --no-restore
veröffentlichen, wird das Projekt nur mit Paketen kompiliert, die in einem vorherigen dotnet restore
-Vorgang wiederhergestellt wurden. In .NET 5 funktionierte dieser Prozess und führte zu einer generationsübergreifenden (Crossgen) Binärdatei. In .NET 6 schlägt dieser Prozess mit dem NETSDK1094 Fehler fehl.
Eingeführt in Version
.NET 6
Vorheriges Verhalten
In früheren Versionen wurde die generationsübergreifende Anwendung mit der Runtime gepackt. Daher konnte der Crossgen-Prozess in Ihrer Anwendung ausgeführt werden, unabhängig davon, ob das Projekt wiederhergestellt wurde oder nicht. Es war eine gängige Methode, dotnet restore
von dotnet publish
zu trennen und dem Veröffentlichungsbefehl --no-restore
hinzuzufügen, um sicherzustellen, dass keine zusätzlichen Netzwerkzugriffe erfolgten.
Neues Verhalten
In .NET 6 schlägt dotnet restore
gefolgt von dotnet publish -p:PublishReadyToRun=true --no-restore
mit dem NETSDK1094 Fehler fehl. Dies liegt daran, dass die generationsübergreifende Binärdatei jetzt als separates NuGet-Paket ausgeliefert wird und daher Teil des Wiederherstellungsvorgangs sein muss, damit die Veröffentlichung erfolgreich ist.
Grund für die Änderung
Die generationsübergreifende Binärdatei ist für viele Workloads nicht erforderlich und wurde daher vom Haupt-SDK getrennt. Sie wird in der Regel bedarfsbasiert angefordert, und die MSBuild-Ziele für die Veröffentlichung verarbeiten diese Anforderung jetzt durch Hinzufügen des Pakets zur Liste der wiederherzustellenden Pakete.
Empfohlene Maßnahme
- Wenn Sie eine isolierte Veröffentlichungsfunktionalität beibehalten möchten, teilen Sie dem Wiederherstellungsschritt mit, dass Sie ReadyToRun veröffentlichen. Fügen Sie der Befehlszeile für die Wiederherstellung auch
-p:PublishReadyToRun=true
hinzu. - Oder entfernen Sie
--no-restore
aus der Befehlszeile für die Veröffentlichung, damit der Veröffentlichungsbefehl auch generationsübergreifende Dateien wiederherstellen kann.