此页上记录了以下重大更改:
破坏性变更 | 已引入的版本 |
---|---|
设计时生成仅返回顶级包引用 | 3.1 |
资源清单文件名更改 | 3.0 |
SDK 中现在包含的项目工具 | 2.1 |
.NET Core 3.1
设计时生成仅返回最上层包引用
从 .NET Core SDK 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
无
.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)不同。
注释
如果指定了LogicalName
、ManifestResourceName
或DependentUpon
元数据在项目文件中的EmbeddedResource
项上,则此更改不会影响该资源文件。
此中断性变更是由于将 EmbeddedResourceUseDependentUponConvention
属性添加到 .NET Core 项目而引入的。 默认情况下,资源文件不会在 .NET Core 项目文件中显式列出,因此没有 DependentUpon
元数据来指定如何命名生成的 .resources 文件。 将EmbeddedResourceUseDependentUponConvention
设置为true
时(默认情况下),MSBuild 会查找同一位置的源文件,并从该文件中提取命名空间和类名。 如果将 EmbeddedResourceUseDependentUponConvention
设置为 false
,MSBuild 会根据之前的行为生成清单名称,该行为将 RootNamespace
与相对文件路径合并。
建议的措施
在大多数情况下,开发人员无需执行任何作,并且你的应用应继续工作。 但是,如果此更改导致应用出现故障,则可以:
将代码更改为需要新的清单名称。
通过将项目文件中的
EmbeddedResourceUseDependentUponConvention
设置为false
来选择退出新的命名约定。<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
类别
MSBuild
受影响的 API
无
.NET Core 2.1
SDK 中现在包含的项目工具
.NET Core 2.1 SDK 现在包含常见的 CLI 工具,不再需要从项目引用这些工具。
更改描述
在 .NET Core 2.0 中,项目通过 <DotNetCliToolReference>
项目设置引用外部 .NET 工具。 在 .NET Core 2.1 中,其中一些工具包含在 .NET Core SDK 中,并且不再需要该设置。 如果在项目中包括对这些工具的引用,将收到如下所示的错误:. NET Core SDK 中现在包含工具“Microsoft.EntityFrameworkCore.Tools.DotNet”。
.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
无