共用方式為


.NET Core 2.1 - 3.1 中的 MSBuild 中斷性變更

本頁記載了下列中斷性變更:

重大變更 導入的版本
只傳回最上層套件參考的設計階段組建 3.1
資源資訊清單檔名稱變更 3.0
SDK 中目前包含的專案工具 2.1

.NET Core 3.1

只傳回最上層套件參考的設計階段組建

從 .NET Core SDKK 3.1.400 開始,RunResolvePackageDependencies 目標只會傳回最上層的套件參考。

導入的版本

.NET Core SDK 3.1.400

變更描述

在舊版 .NET Core SDK 中,RunResolvePackageDependencies 目標會建立下列 MSBuild 項目,其中包含 NuGet 資產檔案的資訊:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Visual Studio 會用這項資料在方案總管中填入 [相依性] 節點。 不過,其資料量可能很大,且除非 [相依性] 節點展開,否則不需要這些資料。

從 .NET Core SDK 3.1.400 版開始,多數這類項目不會經預設產生。 系統只會傳回 Package 型別的項目。 如果 Visual Studio 需要項目來填入 [相依性] 節點,則會直接從資產檔案讀取資訊。

變更原因

之所以推出這項變更,是為了改善 Visual Studio 內的解決方案載入效能。 之前系統會載入所有的套件參考,意即載入許多大部分使用者永遠不會查看的參考。

如果您有相依於這些項目建立的 MSBuild 邏輯,請在專案檔中將 EmitLegacyAssetsFileItems 屬性設為 true。 這項設定能讓先前的行為 (也就是建立所有項目的行為) 繼續進行。

類別

MSBuild

受影響的 API

N/A


.NET Core 3.0

資源資訊清單檔名稱變更

從 .NET Core 3.0 開始,在預設案例中,MSBuild 會為資源檔產生不同的資訊清單檔名稱。

導入的版本

3.0

變更描述

在 .NET Core 3.0 之前,如果並未對專案檔中的 EmbeddedResource 項目指定 LogicalNameManifestResourceNameDependentUpon 中繼資料,MSBuild 就會在模式 <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources 中產生資訊清單檔名稱。 如果未在專案檔中定義 RootNamespace,則這會預設為專案名稱。 例如,對於根專案目錄中名為 Form1.resx 的資源檔產生的資訊清單名稱是 MyProject.Form1.resources

從 .NET Core 3.0 開始,如果資源檔與相同名稱的來源檔案共置 (例如 Form1.resxForm1.cs),MSBuild 會使用來源檔案中的型別資訊,在模式 <Namespace>.<ClassName>.resources 中產生資訊清單檔名稱。 命名空間和類別名稱是從共置原始程式檔的第一個型別擷取。 例如,對於與名為 Form1.cs 的來源檔案共置而且名為 Form1.resx 的資源檔,產生的資訊清單名稱是 MyNamespace.Form1.resources。 請注意,檔案名稱的第一個部分不同於舊版 .NET Core (MyNamespace 而非 MyProject)。

注意

如果您在專案檔中的 EmbeddedResource 項目上指定 LogicalNameManifestResourceNameDependentUpon 中繼資料,則這項變更不會影響該資源檔。

此中斷性變更是透過將 EmbeddedResourceUseDependentUponConvention 屬性新增至 .NET Core 專案而進行。 根據預設,資源檔不會明確列在 .NET Core 專案檔中,因此沒有 DependentUpon 中繼資料可指定如何命名產生的 .resources 檔案。 EmbeddedResourceUseDependentUponConvention 設定為 true 時,這是預設值,MSBuild 會尋找共置的來源檔案,並從該檔案擷取命名空間和類別名稱。 如果您設定 EmbeddedResourceUseDependentUponConventionfalse,MSBuild 會根據先前的行為產生資訊清單名稱,這會合併 RootNamespace 和相對檔案路徑。

在大部分情況下,開發人員不需要採取任何動作,您的應用程式應該會繼續運作。 不過,如果這項變更中斷您的應用程式,您可以:

  • 將您的程式碼變更為預期新的資訊清單名稱。

  • 在專案檔中將 EmbeddedResourceUseDependentUponConvention 設定為 false,以退出新的命名慣例。

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

類別

MSBuild

受影響的 API

N/A


.NET Core 2.1

SDK 中目前包含的專案工具

.NET Core 2.1 SDK 現在已包含常用的 CLI 工具,因此您不再需要從專案參考這些工具。

變更描述

在 .NET Core 2.0 中,專案會參考具有 <DotNetCliToolReference> 專案設定的外部 .NET 工具。 在 .NET Core 2.1 中,.NET Core SDK 已包含了其中一些工具,因此不再需要該設定。 您的專案若包含對這些工具的參考,將會收到如下的錯誤:工具 'Microsoft.EntityFrameworkCore.Tools.DotNet' 現已包含在 .NET Core SDK 中。

現已包含在 .NET Core 2.1 SDK 中的工具:

<DotNetCliToolReference> 值 工具
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

導入的版本

.NET Core SDK 2.1.300

從您的專案中移除 <DotNetCliToolReference> 設定。

類別

MSBuild

受影響的 API

N/A