執行階段特定應用程式不再獨立
執行階段特定應用程式或具有 RuntimeIdentifier
的 .NET 應用程式預設不再獨立。 相反地,它們預設為架構相依。
在下列情況下,這是中斷性變更:
- 如果您部署、散發或發佈應用程式,但未明確新增
SelfContained
屬性,而且也不需要在電腦上安裝 .NET 執行階段,即可運作。 在此情況下,您可能已依賴先前的行為,預設產生獨立的應用程式。 - 如果您依賴 IL 連結工具。 在案例中,請採取建議動作底下所述的步驟,才能再次使用 IL 連結。
先前的行為
先前,如果已指定執行階段識別碼 (RID) (透過 RuntimeIdentifier),即使未明確指定 SelfContained
,應用程式仍會發佈為獨立式。
此外:
- 如果未將
PublishSelfContained
明確設定為false
,發佈屬性PublishSingleFile
和PublishAot
會隱含RuntimeIdentifier
,因此在作業期間為SelfContained
(如果未指定),包括dotnet build
、dotnet restore
和dotnet publish
。 PublishTrimmed
屬性未隱含SelfContained
。- 如果未指定
SelfContained
,則PublishReadyToRun
屬性隱含SelfContained
。
新的行為
從 .NET 8 開始,針對以 .NET 8 或更新版本為目標的應用程式,RuntimeIdentifier
預設不再隱含 SelfContained
。 相反地,指定執行階段識別碼的應用程式預設會相依於 .NET 執行階段 (架構相依)。 以 .NET 7 或舊版為目標的應用程式不會受到影響。
此外:
- 如果
PublishSelfContained
未明確設定為false
,則發佈屬性PublishSingleFile
和PublishAot
現在僅於dotnet publish
期間會隱含SelfContained
(如果未指定),(也就是不適用於dotnet build
或dotnet 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>