官宣.NET 7 预览版5

点击上方蓝字

关注我们

(本文阅读时间:12分钟)

今天我们发布了 .NET 7 预览版 5。.NET 7 的这个预览版包括对通用数学的改进,方便了 API 作者,使其更轻松,一个新的 ML.NET 文本分类 API,增加了最先进的深度学习技术 ,对于自然语言处理,对源代码生成器的各种改进以及用于 RegexGenerator 的新 Roslyn 分析器和修复器,以及在 CodeGen、可观察性、JSON 序列化/反序列化和使用流方面的多项性能改进。

您可以下载适用于 Windows、macOS 和 Linux 的 .NET 7 Preview 5。 

  • 安装程序和二进制文件

  • 容器图像

  • Linux 软件包

  • 发行说明

  • 已知的问题

  • GitHub 问题跟踪器

.NET 7 预览版 5 已通过 Visual Studio 17.3 预览版 2 进行测试。如果您想将 .NET 7 与 Visual Studio 系列产品一起使用,我们建议您使用预览频道版本。如果您使用的是 macOS,我们建议使用最新的 Visual Studio 2022 for Mac 预览版。现在,让我们了解此版本中的一些最新更新。

  • 通用数学:

    https://devblogs.microsoft.com/dotnet/dotnet-7-generic-math/?ocid=AID3042760

  • .NET 7 Preview 5:

    https://dotnet.microsoft.com/download/dotnet/7.0?ocid=AID3042760

  • 安装程序和二进制文件:

    https://dotnet.microsoft.com/download/dotnet/7.0?ocid=AID3042760

  • 容器图像:

    https://mcr.microsoft.com/catalog?search=dotnet/

  • Linux 软件包:

    https://github.com/dotnet/core/blob/master/release-notes/7.0/

  • 发行说明:

    https://github.com/dotnet/core/tree/master/release-notes/7.0

  • 已知的问题:

    https://github.com/dotnet/core/blob/main/release-notes/7.0/known-issues.md

  • GitHub 问题跟踪器:

    https://github.com/dotnet/core/issues

  • 预览频道版本:

    https://visualstudio.com/preview

  • Visual Studio 2022 for Mac 预览版:

    https://visualstudio.microsoft.com/vs/mac/preview/

b830f3a499f3da5cfcd220cfb350bd18.png

可观察性 

c35880806570b60f1d193b16c9ef1268.png

可观察性的目标是帮助您更好地了解应用程序在规模和技术复杂性增加时的状态。 

公开高效的 ActivityEvent 和 ActivityLink 标记枚举器方法

#68056

公开的方法可用于在性能关键场景中枚举 Tag 对象,而无需任何额外的分配和快速的项目访问。

var tags = new List<KeyValuePair<string, object?>>()
{new KeyValuePair<string, object?>("tag1", "value1"),new KeyValuePair<string, object?>("tag2", "value2"),
};ActivityLink link = new ActivityLink(default, new ActivityTagsCollection(tags));foreach (ref readonly KeyValuePair<string, object?> tag in link.EnumerateTagObjects())
{// Consume the link tags without any extra allocations or value copying.
}            ActivityEvent e = new ActivityEvent("SomeEvent", tags: new ActivityTagsCollection(tags));foreach (ref readonly KeyValuePair<string, object?> tag in e.EnumerateTagObjects())
{// Consume the event's tags without any extra allocations or value copying.
}
  • 可观察性:

    https://devblogs.microsoft.com/dotnet/opentelemetry-net-reaches-v1-0/?ocid=AID3042760

  • #68056:

    https://github.com/dotnet/runtime/issues/68056

33b945a62fc07ac1541121bf33c4a1c0.png

System.Text.Json

多态性 

40d62b5910de155eac3b1acf6ac3e565.png

#63747

System.Text.Json 现在支持使用属性注释对多态类型层次结构进行序列化和反序列化:

[JsonDerivedType(typeof(Derived))]
public class Base
{public int X { get; set; }
}public class Derived : Base
{public int Y { get; set; }
}

此配置为 Base 启用多态序列化,特别是在运行时类型为 Derived 时:

Base value = new Derived();
JsonSerializer.Serialize<Base>(value); // { "X" : 0, "Y" : 0 }

请注意,这不会启用多态反序列化,因为有效负载将作为 Base 往返:

Base value = JsonSerializer.Deserialize<Base>(@"{ ""X"" : 0, ""Y"" : 0 }");
value is Derived; // false

使用类型鉴别器

要启用多态反序列化,用户需要为派生类指定类型鉴别器:

[JsonDerivedType(typeof(Base), typeDiscriminator: "base")]
[JsonDerivedType(typeof(Derived), typeDiscriminator: "derived")]
public class Base
{public int X { get; set; }
}public class Derived : Base
{public int Y { get; set; }
}

现在将发出 JSON 以及类型鉴别器元数据:

Base value = new Derived();
JsonSerializer.Serialize<Base>(value); // { "$type" : "derived", "X" : 0, "Y" : 0 }

可用于多态反序列化值:

Base value = JsonSerializer.Deserialize<Base>(@"{ ""$type"" : ""derived"", ""X"" : 0, ""Y"" : 0 }");
value is Derived; // true

类型鉴别器标识符也可以是整数,因此以下形式是有效的:

[JsonDerivedType(typeof(Derived1), 0)]
[JsonDerivedType(typeof(Derived2), 1)]
[JsonDerivedType(typeof(Derived3), 2)]
public class Base { }JsonSerializer.Serialize<Base>(new Derived2()); // { "$type" : 1, ... }
  • #63747:

    https://github.com/dotnet/runtime/issues/63747

▌Utf8JsonReader.CopyString

#54410

直到今天,Utf8JsonReader.GetString() 一直是用户使用解码后的 JSON 字符串的唯一方式。这将始终分配一个新字符串,这可能不适合某些性能敏感的应用程序。新包含的 CopyString 方法允许将未转义的 UTF-8 或 UTF-16 字符串复制到用户拥有的缓冲区:

int valueLength = reader.HasReadOnlySequence ? checked((int)ValueSequence.Length) : ValueSpan.Length;
char[] buffer = ArrayPool<char>.Shared.Rent(valueLength);
int charsRead = reader.CopyString(buffer);
ReadOnlySpan<char> source = buffer.Slice(0, charsRead);ParseUnescapedString(source); // handle the unescaped JSON string
ArrayPool<char>.Shared.Return(buffer);

或者如果处理 UTF-8 更可取:

ReadOnlySpan<byte> source = stackalloc byte[0];
if (!reader.HasReadOnlySequence && !reader.ValueIsEscaped)
{source = reader.ValueSpan; // No need to copy to an intermediate buffer if value is span without escape sequences
}
else
{int valueLength = reader.HasReadOnlySequence ? checked((int)ValueSequence.Length) : ValueSpan.Length;Span<byte> buffer = valueLength <= 256 ? stackalloc byte[256] : new byte[valueLength];int bytesRead = reader.CopyString(buffer);source = buffer.Slice(0, bytesRead);
}ParseUnescapedBytes(source);
  • #54410:

    https://github.com/dotnet/runtime/issues/54410

  • Utf8JsonReader.GetString():

    https://docs.microsoft.com/dotnet/api/system.text.json.utf8jsonreader.getstring?view=net-6.0?ocid=AID3042760

▌源生成改进

添加了对 IAsyncEnumerable<T> (#59268)、JsonDocument(#59954) 和 DateOnly/TimeOnly(#53539) 类型的源代码生成支持。 

例如:

[JsonSerializable(typeof(typeof(MyPoco))]
public class MyContext : JsonSerializerContext {}public class MyPoco
{// Use of IAsyncEnumerable that previously resulted // in JsonSerializer.Serialize() throwing NotSupportedException public IAsyncEnumerable<int> Data { get; set; } 
}// It now works and no longer throws NotSupportedException
JsonSerializer.Serialize(new MyPoco { Data = ... }, MyContext.MyPoco);
  • #59268:

    https://github.com/dotnet/runtime/issues/59268

  • #59954:

    https://github.com/dotnet/runtime/issues/59954

  • #53539:

    https://github.com/dotnet/runtime/issues/53539

9e741ec2e122ac6f851ffa7ee914c29c.png

System.IO.Stream

ReadExactly 和 ReadAtLeast 

61c407ec619ad270e5a42c0116bee34f.png

#16598

使用 Stream.Read() 时最常见的错误之一是 Read() 返回的数据可能比 Stream 中可用的数据少,而数据也比传入的缓冲区少。即使对于意识到这一点的程序员来说, 每次他们想从 Stream 中读取时都编写相同的循环很烦人。

为了解决这种情况,我们在 System.IO.Stream 基类中添加了新方法:

namespace System.IO;public partial class Stream
{public void ReadExactly(Span<byte> buffer);public void ReadExactly(byte[] buffer, int offset, int count);public ValueTask ReadExactlyAsync(Memory<byte> buffer, CancellationToken cancellationToken = default);public ValueTask ReadExactlyAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken = default);public int ReadAtLeast(Span<byte> buffer, int minimumBytes, bool throwOnEndOfStream = true);public ValueTask<int> ReadAtLeastAsync(Memory<byte> buffer, int minimumBytes, bool throwOnEndOfStream = true, CancellationToken cancellationToken = default);
}

新的 ReadExactly 方法保证准确读取请求的字节数。如果流在读取请求的字节之前结束,则抛出 EndOfStreamException。

using FileStream f = File.Open("readme.md");
byte[] buffer = new byte[100];f.ReadExactly(buffer); // guaranteed to read 100 bytes from the file

新的 ReadAtLeast 方法将至少读取请求的字节数。如果有更多数据可用,它可以读取更多数据,直到缓冲区的大小。如果流在读取请求的字节之前结束,则会引发 EndOfStreamException(在高级情况下,当您想要 ReadAtLest 的好处但您还想自己处理流结束场景时,您可以选择不引发异常)。

using FileStream f = File.Open("readme.md");
byte[] buffer = new byte[100];int bytesRead = f.ReadAtLeast(buffer, 10);
// 10 <= bytesRead <= 100
  • #16598:

    https://github.com/dotnet/runtime/issues/16598

8529a290cf9f9bb3e038e06e2c8389a6.png

RegexGenerator 的新 Roslyn 分析器和修复器 

b5447f47493d9e15095f295471430304.png

#69872 

在 .NET 7 中的正则表达式改进中,Stephen Toub 描述了新的 RegexGenerator 源生成器,它允许您在编译时静态生成正则表达式,从而获得更好的性能。要利用这一点,首先您必须在代码中找到可以使用它的位置,然后对每个代码进行更改。这听起来像是 Roslyn 分析器和修复器的完美工作,所以我们在 Preview 5 中添加了一个。

▌分析仪

新的分析器包含在 .NET 7 中,将搜索可以转换为使用 RegexGenerator 源生成器的 Regex 用途。分析器将检测 Regex 构造函数的使用,以及满足以下条件的 Regex 静态方法的使用:

提供的参数在编译时具有已知值。源代码生成器的输出取决于这些值,因此必须在编译时知道它们。

它们是面向 .NET 7 的应用程序的一部分。新的分析器包含在 .NET 7 目标包中,只有面向 .NET 7 的应用程序才有资格使用此分析器。

LangVersion(了解更多)高于 10。目前正则表达式源生成器需要将 LangVersion 设置为预览。

下面是 Visual Studio 中正在运行的新分析器:

281edd6bfa991f4226e9ab0313f5e1c2.png

  • #69872:

    https://github.com/dotnet/runtime/pull/69872

  • .NET 7 中的正则表达式改进中,Stephen Toub 描述了新的 RegexGenerator 源生成器:

    https://devblogs.microsoft.com/dotnet/regular-expression-improvements-in-dotnet-7/#source-generation?ocid=AID3042760

  • 了解更多:

    https://docs.microsoft.com/dotnet/csharp/language-reference/configure-language-version?ocid=AID3042760

▌代码修复器

代码修复程序也包含在 .NET 7 中,它做了两件事。首先,它建议使用 RegexGenerator 源生成器方法,并为您提供覆盖默认名称的选项。然后它用对新方法的调用替换原始代码。

以下是 Visual Studio 中正在运行的新代码修复程序:

b24b9005cb3034187d194b939c4532ad.png

7b6fd39e94d4946f835e2d089c8dabd7.png

通用数学 

d99f2bc95e6ad204a67a1ec39ba5f7af.png

在 .NET 6 中,我们预览了一个名为 Generic Math 的功能,它允许 .NET 开发人员在通用代码中利用静态 API,包括运算符。此功能将直接使可以简化代码库的 API 作者受益。其他开发人员将间接受益,因为他们使用的 API 将开始支持更多类型,而不需要每个数字类型都获得显式支持。 

在 .NET 7 中,我们对实现进行了改进并响应了社区的反馈。有关更改和可用 API 的更多信息,请参阅我们的通用数学特定公告。

  • Generic Math:

    https://devblogs.microsoft.com/dotnet/preview-features-in-net-6-generic-math/?ocid=AID3042760

  • 通用数学特定公告:

    https://devblogs.microsoft.com/dotnet/dotnet-7-generic-math/?ocid=AID3042760

d46edbd6ffac9169490cd92a6da80604.png

System.Reflection 调用成员时的性能改进 

55261f6524cd045a6f67542c115c847b.png

#67917 

当对同一个成员进行多次调用时,使用反射来调用成员(无论是方法、构造函数还是属性 gettersetter)的开销已大大减少。典型增益快 3-4 倍。

使用 BenchmarkDotNet 包:

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Reflection;namespace ReflectionBenchmarks
{internal class Program{static void Main(string[] args){BenchmarkRunner.Run<InvokeTest>();}}public class InvokeTest{private MethodInfo? _method;private object[] _args = new object[1] { 42 };[GlobalSetup]public void Setup(){_method = typeof(InvokeTest).GetMethod(nameof(InvokeMe), BindingFlags.Public | BindingFlags.Static)!;}[Benchmark]// *** This went from ~116ns to ~39ns or 3x (66%) faster.***public void InvokeSimpleMethod() => _method!.Invoke(obj: null, new object[] { 42 });[Benchmark]// *** This went from ~106ns to ~26ns or 4x (75%) faster. ***public void InvokeSimpleMethodWithCachedArgs() => _method!.Invoke(obj: null, _args);public static int InvokeMe(int i) => i;}
}
  • #67917 :

    https://github.com/dotnet/runtime/pull/67917

075df915e67950143c4ba71d9d58daf2.png

ML.NET 文本分类 API

806796f0b754521b67c0829da9372c4b.png

文本分类是将标签或类别应用于文本的过程。

常见用例包括:

  • 将电子邮件分类为垃圾邮件或非垃圾邮件

  • 从客户评论中分析情绪是积极的还是消极的

  • 应用标签来支持工单

文本分类是分类的一个子集,因此今天您可以使用 ML.NET 中现有的分类算法来解决文本分类问题。然而,这些算法并没有解决文本分类以及现代深度学习技术的常见挑战。

我们很高兴推出 ML.NET 文本分类 API,该 API 使您可以更轻松地训练自定义文本分类模型,并将用于自然语言处理的最新最先进的深度学习技术引入 ML.NET。

有关更多详细信息,请参阅我们的 ML.NET 特定公告。

  • ML.NET 特定公告:

    https://devblogs.microsoft.com/dotnet/introducing-the-ml-dotnet-text-classification-api-preview/?ocid=AID3042760

e279080c0cdda2c4cdbda885e973ef96.png

代码生成

b1bc2ac131d8dbdc58e6728abc27ac2e.png

非常感谢社区贡献者。

@singleaccretion 在预览版 5 期间做出了 23 项 PR 贡献,其中亮点是: 

改进冗余分支优化以处理更多副作用 #68447

PUTARG_STK/x86: 标记 push [mem] 候选 reg 可选 #68641

在 LCL_FLD 上复制传播 #68592

@Sandreenko 完成允许 StoreLclVar src 成为 IND/FLD #59315。@hez2010 修复了 #68475 中的 CircleInConvex 测试。

来自@anthonycanino、@aromaa 和@ta264 的更多贡献包含在后面的部分中。

Arm64

#68363 合并“msub”(将两个寄存器值相乘,从第三个寄存器值中减去乘积)和“madd”(将两个寄存器值相乘,添加第三个寄存器值)逻辑。

Arm64:让 CpBlkUnroll 和 InitBlkUnroll 使用 SIMD 寄存器来初始化复制小于 128 字节的内存块(请参阅性能改进细节)。

9328924f27261a516402d0cc7966f47c.png

循环优化

#67930 处理循环克隆的更多场景现在支持以 > 1 的增量向后或向前的循环(请参阅性能改进详细信息)。

4e6d311b3d99ecc947635bb50a0fc75f.png

#68588 提升“this”对象的空值检查将空值检查移动到循环外的对象上(请参阅性能改进细节)。

ecca010b2e58f092e8527a9873a1cc9f.png

  • @singleaccretion:

    https://github.com/singleaccretion

  • 23 项 PR 贡献:

    https://github.com/dotnet/runtime/pulls?q=is%3Apr+is%3Aclosed+label%3Aarea-CodeGen-coreclr+closed%3A2022-04-18..2022-05-24+author%3Asingleaccretion+

  • #68447:

    https://github.com/dotnet/runtime/pull/68447

  • #68641:

    https://github.com/dotnet/runtime/pull/68641

  • #68592:

    https://github.com/dotnet/runtime/pull/68592

  • @Sandreenko:

    https://github.com/Sandreenko

  • #59315:

    https://github.com/dotnet/runtime/pull/59315

  • @hez2010:

    https://github.com/hez2010

  • #68475:

    https://github.com/dotnet/runtime/pull/68475

  • @anthonycanino:

    https://github.com/anthonycanino

  • @aromaa:

    https://github.com/aromaa

  • @ta264:

    https://github.com/ta264

  • #68363:

    https://github.com/dotnet/runtime/pull/68363

  • Arm64:让 CpBlkUnroll 和 InitBlkUnroll 使用 SIMD 寄存器:

    https://github.com/dotnet/runtime/pull/68085

  • 性能改进细节:

    https://pvscmdupload.blob.core.windows.net/autofilereport/autofilereports/04_28_2022/refs/heads/main_arm64_Windows 10.0.19041_Improvement/System.Numerics.Tests.Perf_Matrix4x4.html

  • #67930 处理循环克隆的更多场景:

    https://github.com/dotnet/runtime/pull/67930

  • #68588 提升“this”对象的空值检查:

    https://github.com/dotnet/runtime/pull/68588

  • 性能改进细节:

    https://pvscmdupload.blob.core.windows.net/autofilereport/autofilereports/05_03_2022/refs/heads/main_x64_Windows 10.0.18362_Improvement/System.Text.Encodings.Web.Tests.Perf_Encoders.html

28d18ae21d0a3533905062f14354b797.png

x86/x64 优化 

4e02d5fe4daf89a7794301ae79a1b7d9.png

  • #67182 在 x64 上将 shlx、sarx、shrx 优化为 x64 上的 mov+shl、sar 或 shr 到 shlx、sarx 或 shrx。

  • #68091为 x64 启用了 UMOD 优化。

  • @anthonycanino 在 #68677中添加了 X86Serialize 硬件内在。

  • @aromaa 在 #66965中将 bswap+mov 优化为movbe。

  • @ta264 修复了 #68046 中 clr.alljits 子集的linux-x86 编译。

  • #67182 在 x64 上将 shlx:

    https://github.com/dotnet/runtime/pull/67182

  • sarx:

    https://github.com/dotnet/runtime/pull/67182

  • shrx 优化为 x64 :

    https://github.com/dotnet/runtime/pull/67182

  • #68091:

    https://github.com/dotnet/runtime/pull/68091

  • @anthonycanino :

    https://github.com/anthonycanino

  • #68677 :

    https://github.com/dotnet/runtime/pull/68677

  • @aromaa :

    https://github.com/aromaa

  • #66965:

    https://github.com/dotnet/runtime/pull/66965

  • @ta264:

    https://github.com/ta264

  • #68046 :

    https://github.com/dotnet/runtime/pull/68046

22c2e713165ce00128e363c51b3af058.png

一般优化

cc60704ef72bbfb640bfce659b9cb058.png

  • PR#68105 启用了多个嵌套的“no GC”区域请求。

  • PR#69034 删除了“提升参数”尾调用限制。

  • PR#68105:

    https://github.com/dotnet/runtime/pull/68105

  • PR#69034 :

    https://github.com/dotnet/runtime/pull/69034

3bbe180502cdfb6ad7ee7755ce0e4e0f.png

现代化 JIT

c00426f4a0fdd902049a7a575d901e95.png

随着社区增加了对 JIT 代码库的贡献,重组和现代化我们的代码库以使我们的贡献者能够轻松地增加和快速开发代码变得非常重要。 

在 Preview 5 中,我们在内部做了大量工作,清理了 JIT 的中间表示,并消除了过去设计决策带来的限制。在许多情况下,这项工作导致 JIT 本身的内存使用更少和吞吐量更高,而在其他情况下,它导致了更好的代码质量。以下是一些亮点: 

  • 删除 CLS_VAR #68524

  • 删除 GT_ARGPLACE #68140

  • 删除 GT_PUTARG_TYPE #68748

以上允许我们在使用 byte/sbyte/short/ushort 类型的参数内联函数时消除 JIT 内联中的旧限制,从而提高代码质量(允许内联替换小参数 #69068)

需要改进的一个领域是更好地理解涉及读取和写入结构和结构字段的不安全代码。@SingleAccretion 通过将 JIT 的内部模型转换为更通用的“物理”模型,在这一领域做出了巨大的改变。这为 JIT 使用 struct reinterpretation 等功能更好地推理不安全代码铺平了道路:

  • 物理值编号 #68712

  • 为 VNF_BitCast 实现常量折叠 #68979

  • 还进行了其他小的清理以简化 JIT IR:

  • 删除 GTF_LATE_ARG #68617

  • 在内联候选参数中替换 GT_RET_EXPR #69117

  • 在 LIR #68460 中删除存储作为调用的操作数

  • #68524:

    https://github.com/dotnet/runtime/pull/68524

  • #68140:

    https://github.com/dotnet/runtime/pull/68140

  • #68748:

    https://github.com/dotnet/runtime/pull/68748

  • #69068:

    https://github.com/dotnet/runtime/pull/69068

  • @SingleAccretion :

    https://github.com/SingleAccretion

  • #68712:

    https://github.com/dotnet/runtime/pull/68712

  • #68979:

    https://github.com/dotnet/runtime/pull/68979

  • #68617:

    https://github.com/dotnet/runtime/pull/68617

  • #69117:

    https://github.com/dotnet/runtime/pull/69117

  • #68460 :

    https://github.com/dotnet/runtime/pull/68460

1c9c28e9c8f6081b677dddf3dafd44d4.png

启用库修剪

e3daec227754ece05aaca023f856a37f.png

正如我们之前所描述的,修剪让 SDK 从您的自包含应用程序中删除未使用的代码,以使它们更小。但是,修剪警告可能表明应用程序与修剪不兼容。为了使应用程序兼容,它们的所有引用也必须兼容。

为此,我们需要库也采用修剪。在预览版 5 中,我们努力使用 Roslyn 分析器更轻松地查找和修复库中的修剪警告。要查看库的修剪警告,请将 <IsTrimmable>true</IsTrimmable> 添加到项目文件中。修复警告后,使用您的库修剪的应用程序将更小并且与修剪兼容。请参阅准备 .NET 库以进行修剪 - .NET | Microsoft Docs 了解有关库修剪的更多信息。

  • 修剪:

    https://docs.microsoft.com/dotnet/core/deploying/trimming/trim-self-contained?ocid=AID3042760

  • 请参阅准备 .NET 库以进行修剪 - .NET | Microsoft Docs :

    https://docs.microsoft.com/en-us/dotnet/core/deploying/trimming/prepare-libraries-for-trimming?ocid=AID3042760

ef8658db26f43244759ef7910663fa98.png

面向 .NET 7

45da3c3f07fe0cba0cf75e3ad8a02775.png

要面向 .NET 7,您需要在项目文件中使用 .NET 7 Target Framework Moniker (TFM)。例如: 

<TargetFramework>net7.0</TargetFramework>

全套 .NET 7 TFM,包括特定于操作的 TFM。

  • net7.0

  • net7.0-安卓

  • net7.0-ios

  • net7.0-maccatalyst

  • net7.0-macos

  • net7.0-tvos

  • net7.0-windows

我们希望从 .NET 6 升级到 .NET 7 应该很简单。请报告您在使用 .NET 7 测试现有应用程序的过程中发现的任何重大更改。

012b65ad2ca079a98ddb5055a44943ba.png

支持

1c3313ade0f7409de5ddf373bd3172f0.png

.NET 7 是一个短期支持 (STS) 版本,这意味着它将在发布之日起 18 个月内获得免费支持和补丁。需要注意的是,所有版本的质量都是相同的。唯一的区别是支撑的长度。有关 .NET 支持政策的更多信息,请参阅 .NET 和 .NET Core 官方支持政策。

我们最近将“Current当前”名称更改为“短期支持 (STS)”。我们正在推出这一变化。

  • .NET 和 .NET Core 官方支持政策:

    https://dotnet.microsoft.com/platform/support/policy/dotnet-core?ocid=AID3042760

  • 推出这一变化:

    https://github.com/dotnet/core/pull/7517

86eb80d1a25cdfa361f30f5bc28f3670.png

重大变化

c1f37672bb232eefaa8ef6693d35ed35.png 

您可以通过阅读 .NET 7 中的重大更改文档找到最新的 .NET 7 重大更改列表。它按区域和版本列出了重大更改,并附有详细说明的链接。

要查看提出了哪些重大更改但仍在审核中,请关注 Proposed .NET Breaking Changes GitHub 问题。

  • .NET 7 重大更改列表:

    https://docs.microsoft.com/dotnet/core/compatibility/7.0?ocid=AID3042760

  • Proposed .NET Breaking Changes GitHub 问题:

    https://github.com/dotnet/core/issues/7131

e5eca7e363ef5233c7014f6c7baef61d.png

路线图

a310e35b05981c413b89e4c0760826a0.png

.NET 版本包括产品、库、运行时和工具,代表了 Microsoft 内外多个团队之间的协作。您可以通过阅读产品路线图了解有关这些领域的更多信息:

  • ASP.NET Core 7 和 Blazor 路线图

  • EF 7 路线图

  • 机器学习网络

  • .NET MAUI

  • WinForms

  • WPF

  • NuGet

  • Roslyn

  • Runtime

  • ASP.NET Core 7 和 Blazor 路线图:

    https://github.com/dotnet/aspnetcore/issues/39504

  • EF 7 路线图:

    https://docs.microsoft.com/ef/core/what-is-new/ef-core-7.0/plan

  • 机器学习网络:

    https://github.com/dotnet/machinelearning/blob/main/ROADMAP.md

  • .NET MAUI:

    https://github.com/dotnet/maui/wiki/Roadmap

  • WinForms:

    https://github.com/dotnet/winforms/blob/main/docs/roadmap.md

  • WPF:

    https://github.com/dotnet/wpf/blob/main/roadmap.md

  • NuGet:

    https://github.com/NuGet/Home/issues/11571

  • Roslyn:

    https://github.com/dotnet/roslyn/blob/main/docs/Language Feature Status.md

  • Runtime:

    https://github.com/dotnet/core/blob/main/roadmap.md

我们感谢您对 .NET 的所有支持和贡献。请尝试 .NET 7 Preview 5 并告诉我们您的想法!

  • 感谢:

    https://dotnet.microsoft.com/thanks?ocid=AID3042760

  • 尝试 .NET 7 Preview 5:

    https://dotnet.microsoft.com/download/dotnet/7.0?ocid=AID3042760

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]Android产品研发(十九)

转载请标明出处&#xff1a;一片枫叶的专栏 上一篇文章中我们讲解了webview中问题集锦&#xff0c;讲解了webview的性能优化、webview种入Cookie信息、activity退出的时候清除webview信息报错、如何通过java代码和js代码相互交互、webview如何下载文件以及腾讯的X5浏览服务等知…

【CC精品教程】ContextCapture 10.17安装教程(附CC10.17安装包下载)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) CC10.17相比之前的版本有了好的新的功能和优点,在倾斜摄影测量中有了更多的优势,精度和运行速度有了很大的提升。本文讲解CC的安装,附CC10.17安装包下载,是您航测倾斜摄影测量的入门必备。 文…

mac SecureCRT设置

参考&#xff1a; http://www.2cto.com/os/201407/320292.html SecureCRT 设置 1&#xff09;每次登陆都要输入密码&#xff1a; Global Option -> General 取消&#xff1a;Use Keychain前面的勾 2&#xff09;Logon Actions Logon Actions很强大&#xff0c;和python里…

华为云GaussDB,11.11让企业无后顾之忧

每年11.11大促对于数据库而言都是一场生死考验&#xff0c;如何保障系统的稳定可靠&#xff0c;如何平稳度过业务流量洪峰期&#xff0c;如何高效扩容&#xff0c;成为每个参与活动客户的一大痛点。本文将通过5个常见的大促问题及分析&#xff0c;看看华为云GaussDB是如何解决这…

【CC精品教程】ContextCapture(CC)集群处理环境部署图文教程

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 鉴于CC其三维构建运算的本质,海量数据的解析运算会使用大量的计算机资源,而再好的单台计算机也无法胜过多台计算机的并行运算能力,故而借助局域网内多台计算机设备进行三维构建运算,可以节省大…

Linux-PAM PAM-MySQL的总结

1、理论知识 1.1、PAM模块 1.1.1、PAM的介绍 Pluggable Authentication Modules简称PAM&#xff0c;是一个微缩的可插入认证模块&#xff08;PAM is an acronym for Pluggable Authentication Modules&#xff09; 1.1.2、PAM的结构 1)模块层(PAM服务模块) - PAM结构最底层 作用…

ubuntu下配置jdk(离线压缩包方式)

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;下载jdk压缩包 2、解压后得到名字为jdk1.7.0_21的文件夹&#xff0c;将其复制到 /usr/lib/jvm下&#xff08;需要新建jvm文件夹&#xff09;。3、配置jdk环境变量&#xff1a;在启动终端并输入 gedit /e…

【PhotoScan精品教程】PhotoScan简介、安装教程(附PhotoScan1.4.5安装包下载)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) PhotoScan在无人机航空摄影测量空三运算中,具有运行速度快、精度高等特点。PhotoScan空三运算的结果可以导入CC等进行模型构建。【PhotoScan精品教程】讲解利用PhotoScan软件进行航测内业空三运算…

利用JS脚本快速删除百度网盘同一目录下的不需要文件(可以参考这个方法删除重复文件)

比如百度网盘某目录下存有如下文件&#xff1a; 要求&#xff1a;将如上图文件目录下的文件&#xff0c;每个月只保留最后&#xff08;新&#xff09;一个&#xff08;根据文件名中包含的日期&#xff09;&#xff0c;其它删除。 比如7月份有3个文件&#xff0c;只保留2019-07-…

依赖注入之针对不同类型变量的几种注入方式

控制反转(Inversion of Control)和依赖注入(Dependency Injection)讲的都是一个概念,只不过是站在了不同的角度,所谓的依赖注入: 依赖注入&#xff08;DI&#xff09;是指在运行期&#xff0c;由外部容器动态地将依赖对象注入到组件中。当spring容器启动后&#xff0c;spring容…

【本周六活动】.NET Day in China

点击蓝字关注我们编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun活动介绍去年11月&#xff0c;.NET 6 的发布&#xff0c;为我们带来了 .NET 多平台应用 UI&#xff08;.NET MAUI&#xff09;。就在前不久&#xff0c;.NET MAUI 已正式发布。未来&#xff0c;作为 .NET 7 …

【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三 【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配 【PhotoScan…

[转]Angular 单元测试讲解

Angular_单元测试 测试分类 按开发阶段划分按是否运行划分按是否查看源代码划分其他ATDD,TDD,BDD,DDD ATDDTDDBDDDDDAngular单元测试 Karma的介绍jasmine介绍单元测试的好处使用jasmine和karma创建一个Angular项目Karma配置Test.ts文件测试体验测试Form测试服务service常用断言…

按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格...

首先来建立一个新的Excel文档&#xff0c;在桌面上点击右键&#xff0c;选择【新建】-【Excel工作表】&#xff0c;命名为【新手学员】。 现在这个新Excel文档是空白的&#xff0c;我们接下来会通过按键精灵的脚本来打开并写入一些数据。打开按键精灵软件&#xff0c;点击【新建…

Maui的学习之路 -- 开篇

Maui的学习之路 -- 开篇想了很久我决定发一个Maui介绍做为开篇&#xff0c;虽然这是老生常谈的话题&#xff0c;但是不能没有这样的探讨&#xff08;请容我水一篇&#xff09;。什么是.NET Maui.NET Maui是微软的一款基于.Net多平台应用 UI (.NET MAUI)的跨平台框架&#xff0c…

互联网架构的演变,看了好多这个讲的确实清楚!

从过去的 OA、CRM、ERP 等单机即可满足要求的系统到现代互联网时代各大公司的分布式、微服务平台&#xff0c;互联网架构正在经历着巨大的变革&#xff0c;技术也在不断的更新迭代。 图片来自 Pexels这也意味着众多软件开发者们的压力和挑战正在不断的加大&#xff0c;这种新技…

【Inpho精品教程】Inpho简介、安装教程(附Inpho8安装包下载)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) Inpho UASMaster是Trimble公司旗下的一款摄影测量处理软件。本文讲解Inpho简介、安装教程(附Inpho8安装包下载)。 文章目录 1. Inpho简介2. Inpho安装教程3. Inpho8下载地址1. Inpho简介 1.1 主…

MAUI使用Masa blazor组件库

上一篇(点击阅读)我们实现了UI在Web端(Blazor Server/Wasm)和客户端(Windows/macOS/Android/iOS)共享&#xff0c;这篇我加上 Masa Blazor[2]组件库的引用&#xff0c;并把前几个月写的时间戳转换[3]工具加上。1. 前置知识关于Masa Blazor请点击Masa Blazor官网[4]了解&#xf…

常用的NSLOG日志打印格式

2019独角兽企业重金招聘Python工程师标准>>> 常用的NSLOG日志打印格式 以下是常用的LOG打印&#xff0c;如果有特殊&#xff0c;请我 &#xff0c;这边会不定期更新。 % 对象 %d, %i 整数 %u 无符整形 %f 浮点/双字 %x, %X 二进制整数 %…

Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.

1、 问题 在Android studio里面运行java的lib库&#xff0c;但是错误提示如下 Build file F:\sourceZip\app\build.gradle line: 2An exception occurred applying plugin request [id: com.android.application] > Failed to apply plugin com.android.internal.applicat…