共用方式為


執行階段特定應用程式不再獨立

執行階段特定應用程式或具有 RuntimeIdentifier 的 .NET 應用程式預設不再獨立。 相反地,它們預設為架構相依

在下列情況下,這是中斷性變更:

  • 如果您部署、散發或發佈應用程式,但未明確新增 SelfContained 屬性,而且也不需要在電腦上安裝 .NET 執行階段,即可運作。 在此情況下,您可能已依賴先前的行為,預設產生獨立的應用程式。
  • 如果您依賴 IL 連結工具。 在案例中,請採取建議動作底下所述的步驟,才能再次使用 IL 連結。

先前的行為

先前,如果已指定執行階段識別碼 (RID) (透過 RuntimeIdentifier),即使未明確指定 SelfContained,應用程式仍會發佈為獨立式。

此外:

  • 如果未將 PublishSelfContained 明確設定為 false,發佈屬性 PublishSingleFilePublishAot 會隱含 RuntimeIdentifier,因此在作業期間為 SelfContained (如果未指定),包括 dotnet builddotnet restoredotnet publish
  • PublishTrimmed 屬性未隱含 SelfContained
  • 如果未指定 SelfContained,則 PublishReadyToRun 屬性隱含 SelfContained

新的行為

從 .NET 8 開始,針對以 .NET 8 或更新版本為目標的應用程式,RuntimeIdentifier 預設不再隱含 SelfContained。 相反地,指定執行階段識別碼的應用程式預設會相依於 .NET 執行階段 (架構相依)。 以 .NET 7 或舊版為目標的應用程式不會受到影響。

此外:

  • 如果 PublishSelfContained 未明確設定為 false,則發佈屬性 PublishSingleFilePublishAot 現在僅於 dotnet publish 期間會隱含 SelfContained (如果未指定),(也就是不適用於 dotnet builddotnet restore)。
  • PublishTrimmed 屬性現在也會在 dotnet publish 期間隱含 SelfContained
  • 如果專案目標是 .NET 8 或更新版本,則 PublishReadyToRun 屬性不再隱含 SelfContained

注意

如果您使用 msbuild /t:Publish 發佈且想要讓應用程式成為獨立式,您必須明確指定 SelfContained,即使您的專案具有其中一個已列出發佈屬性也一樣。

導入的版本

.NET 8 Preview 5

中斷性變更的類型

這項變更會影響來源相容性二進位相容性

變更原因

  • 新的 .NET SDK 行為與 Visual Studio 行為一致。
  • 根據預設,架構相依應用程式較小,因為未在每個應用程式中儲存 .NET 的複本。
  • 在應用程式外部管理 .NET 時 (也就是架構相依部署),.NET 會保持更安全且為最新狀態。 擁有自己的執行階段複本的應用程式不會取得安全性更新。 這項變更預設會讓更多應用程式成為架構相依。
  • 在理想情況下,命令列選項是正交。 在此情況下,此工具支援 RID 特定獨立部署 (SCD) 和 RID 特定架構相依部署 (FDD).。 因此,沒有 RID 預設為 FDD,以及沒有 RID 預設為 SCD 並不合理。 此行為通常會讓使用者感到困惑。

.NET 6 會以下列警告提醒使用者這項中斷性變更:

警告 NETSDK1179:使用 '--runtime' 時,必須有一個 '--self-contained' 或 '--no-self-contained' 選項。

既然客戶有時間明確新增 SelfContained,可以引入中斷。

  • 如果您使用 .NET 7 或舊版,並依賴先前推斷 SelfContained 的行為,您會看到下列警告:

    對於 TargetFrameworks >= 8.0 的專案,RuntimeIdentifier 不再自動提供 SelfContained 應用程式。 若要在升級至 8.0 之後繼續建立 .NET Framework 獨立應用程式,請考慮明確設定 SelfContained。

    請依照警告的指引進行,並將您的應用程式宣告為獨立式。 您可以在專案檔中或作為命令列引數執行此動作,例如 dotnet publish --self-contained

  • 如果您使用 .NET 8 並想要保留先前的行為,請以與先前所述的相同方式將 SelfContained 設定為 true

設定專案檔屬性

SelfContained 是 MSBuild 屬性,您可以插入專案檔,其為具有 .csproj.vbproj.fsproj 延伸模組的檔案。 設定屬性,如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <SelfContained>true</SelfContained>
  </PropertyGroup>
</Project>

另請參閱