共用方式為


特定專案的自動 RuntimeIdentifier

指定任意下列屬性的專案現在會自動獲得執行階段識別碼 (RID)。 RID 允許發佈獨立式部署。

  • SelfContained
  • PublishAot
  • PublishReadyToRun
  • PublishSingleFile
  • PublishSelfContained (僅限 .NET SDK 7.0.200 和更新版本)

下列專案可能會受這項變更影響:

  • 規避遺漏執行階段識別碼錯誤的舊專案。
  • RuntimeIdentifiers 但沒有 RuntimeIdentifier 的專案。
  • 使用硬式編碼路徑而沒有 RID 的專案。
  • 有以上屬性,但使用組建而非發佈,且接受的發佈處於中斷狀態的專案。

還有其他可能中斷個別情況的細微差異,目前我們還未掌握。

注意

這項變更僅限 .NET 7.0.200 SDK 中的 dotnet publish 命令。 如需詳細資訊,請參閱僅供發佈的自動 RuntimeIdentifier

導入的版本

.NET 7

先前的行為

之前,這些專案會因以下錯誤無法發佈:

不支援將應用程式發佈至單一檔案,而不指定 RuntimeIdentifier。 請指定 RuntimeIdentifier,或將 PublishSingleFile 設定為 false。

OR

錯誤 NETSDK1031:不支援在未指定 RuntimeIdentifier 的情況下組建或發佈獨立應用程式。 您必須指定 RuntimeIdentifier,或將 SelfContained 設定為 false。

在部分案例中,例如 PublishSingleFile 或在有特殊 RuntimeIdentifiers 邏輯的情況下,專案可能會在沒有 RuntimeIdentifier 的情況下成功建立。

新的行為

專案只要指定任何本文開頭所列的屬性,就會自動獲得 RuntimeIdentifier。 這項新行為會讓依賴 RuntimeIdentifiers 而非 RuntimeIdentifier 的專案組建失敗,因為 RuntimeIdentifier 會影響僅只來自 RuntimeIdentifiers 的輸出路徑。 依賴 PublishSingleFile 但不在採取其他動作時一律給予 RuntimeIdentifierAnyCPU 專案也會失敗。 這些失敗可能會顯示以下訊息:

目標流程結束時未引發 CoreCLR 啟動事件。 請確定目標流程已設定使用 .NET Core。

中斷性變更的類型

此變更可能會影響來源相容性

變更原因

大部分 .NET 專案都無法在未設定 RuntimeIdentifier 的情況下使用提及的屬性發佈。 這項變更能讓您每次使用提及的屬性時,降低手動加入 RID 的需求。

如果您的專案受到影響,您可將 <UseCurrentRuntimeIdentifier>false</UseCurrentRuntimeIdentifier> 新增至您的專案檔,藉此停用自動 RuntimeIdentifier

如果您因輸出路徑變更遭遇中斷,請將 <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> 新增至專案檔。

另請參閱