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.

  • 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.