.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
項目指定 LogicalName
、ManifestResourceName
或 DependentUpon
中繼資料,MSBuild 就會在模式 <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
中產生資訊清單檔名稱。 如果未在專案檔中定義 RootNamespace
,則這會預設為專案名稱。 例如,對於根專案目錄中名為 Form1.resx 的資源檔產生的資訊清單名稱是 MyProject.Form1.resources。
從 .NET Core 3.0 開始,如果資源檔與相同名稱的來源檔案共置 (例如 Form1.resx 和 Form1.cs),MSBuild 會使用來源檔案中的型別資訊,在模式 <Namespace>.<ClassName>.resources
中產生資訊清單檔名稱。 命名空間和類別名稱是從共置原始程式檔的第一個型別擷取。 例如,對於與名為 Form1.cs 的來源檔案共置而且名為 Form1.resx 的資源檔,產生的資訊清單名稱是 MyNamespace.Form1.resources。 請注意,檔案名稱的第一個部分不同於舊版 .NET Core (MyNamespace 而非 MyProject)。
注意
如果您在專案檔中的 EmbeddedResource
項目上指定 LogicalName
、ManifestResourceName
或 DependentUpon
中繼資料,則這項變更不會影響該資源檔。
此中斷性變更是透過將 EmbeddedResourceUseDependentUponConvention
屬性新增至 .NET Core 專案而進行。 根據預設,資源檔不會明確列在 .NET Core 專案檔中,因此沒有 DependentUpon
中繼資料可指定如何命名產生的 .resources 檔案。 EmbeddedResourceUseDependentUponConvention
設定為 true
時,這是預設值,MSBuild 會尋找共置的來源檔案,並從該檔案擷取命名空間和類別名稱。 如果您設定 EmbeddedResourceUseDependentUponConvention
為 false
,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