Freigeben über


Das Veröffentlichen eines ReadyToRun-Projekts mit "-no-restore" erfordert Änderungen an der Wiederherstellung.

Wenn Sie ein Projekt mit -p:PublishReadyToRun=true zusätzlich zu --no-restore veröffentlichen, wird das Projekt nur mit Paketen erstellt, 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ührte Version

.NET 6

Vorheriges Verhalten

In früheren Versionen wurde die generationsübergreifende Anwendung mit der Runtime gepackt. Daher konnte der Crossgen-Prozess unabhängig davon, ob das Projekt wiederhergestellt wurde oder nicht, auf Ihrer Anwendung ausgeführt werden. Es war eine gängige Methode, dotnet restore von dotnet publish zu trennen und --no-restore zum Veröffentlichungsbefehl hinzuzufügen, um zu verhindern, dass zusätzliche Netzwerkzugriffe auftreten.

Neues Verhalten

In .NET 6 tritt bei Verwendung von dotnet restore gefolgt von dotnet publish -p:PublishReadyToRun=true --no-restore der Fehler NETSDK1094 auf. Dies liegt daran, dass die crossgen-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 Änderung

Die Crossgen-Binärdatei ist für viele Workloads nicht erforderlich, daher wurde sie vom Haupt-SDK aufgeteilt. 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öffentlichungsumgebung 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.