特定專案的自動 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
但不在採取其他動作時一律給予 RuntimeIdentifier
的 AnyCPU
專案也會失敗。 這些失敗可能會顯示以下訊息:
目標流程結束時未引發 CoreCLR 啟動事件。 請確定目標流程已設定使用 .NET Core。
中斷性變更的類型
此變更可能會影響來源相容性。
變更原因
大部分 .NET 專案都無法在未設定 RuntimeIdentifier
的情況下使用提及的屬性發佈。 這項變更能讓您每次使用提及的屬性時,降低手動加入 RID 的需求。
建議的動作
如果您的專案受到影響,您可將 <UseCurrentRuntimeIdentifier>false</UseCurrentRuntimeIdentifier>
新增至您的專案檔,藉此停用自動 RuntimeIdentifier
。
如果您因輸出路徑變更遭遇中斷,請將 <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
新增至專案檔。