官宣.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.pswp.cn/news/285706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285706.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285706.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉]Android產品研發(十九)

轉載請標明出處&#xff1a;一片楓葉的專欄 上一篇文章中我們講解了webview中問題集錦&#xff0c;講解了webview的性能優化、webview種入Cookie信息、activity退出的時候清除webview信息報錯、如何通過java代碼和js代碼相互交互、webview如何下載文件以及騰訊的X5瀏覽服務等知…

C語言試題八十九之實現插入排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 C語言實現現…

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

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) CC10.17相比之前的版本有了好的新的功能和優點,在傾斜攝影測量中有了更多的優勢,精度和運行速度有了很大的提升。本文講解CC的安裝,附CC10.17安裝包下載,是您航測傾斜攝影測量的入門必備。 文…

centos7 kickstart 使用小結

1、添加參數使網卡名稱變為eth 1bootloader --locationmbr --append"net.ifnames0 biosdevname0 rhgb quiet" 2、psize使用說明&#xff1a;修改vg PE16m 默認4m 支持256G磁盤&#xff0c;適當的調整pesize,可以更多的使用磁盤空間 1volgroup Vol1--pesize16384 pv.…

IOS-網絡(文件上傳)

1 //2 // ViewController.m3 // IOS_0206_文件上傳4 //5 // Created by ma c on 16/2/6.6 // Copyright © 2016年 博文科技. All rights reserved.7 //8 9 #import "ViewController.h"10 #define BWFileBoundary "----------BowenKeJi"11 #define…

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里…

【微服務專題之】.Net6下集成消息隊列上-RabbitMQ

微信公眾號&#xff1a;趣編程ACE關注可了解更多的.NET日常實戰開發技巧&#xff0c;如需源碼 請公眾號后臺留言 源碼;[如果覺得本公眾號對您有幫助&#xff0c;歡迎關注].Net中RabbitMQ的使用超清觀看視頻哦~官網鏈接RabbitMQ代碼演示-詳細見代碼注釋&#xff0c;操作看上文視…

[轉]總結:Apache/Tomcat/JBOSS/Jetty/Nginx區別 .

總結&#xff1a;Apache/Tomcat/JBOSS/Nginx區別 . 1、Apache是Web服務器&#xff0c;Tomcat是應用&#xff08;Java&#xff09;服務器。Tomcat在中小型系統和并發訪問用戶不是很多的場合下被普遍使用。Apache支持靜態頁&#xff0c;Tomcat支持動態的。 2、Jetty:Tomcat內核作…

華為云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-…

vuepress build提示YAMLException: end of the stream or a document separator is expected at line 7, colu

1、問題 vuePress執行build操作的時候 vuepress build ~/my_blogs/docs/ 錯誤提示如下 YAMLException: end of the stream or a document separator is expected at line 7, column 9:features:^at generateError (/usr/lib/node_modules/vuepress/node_modules/js-yaml/lib…

依賴注入之針對不同類型變量的幾種注入方式

控制反轉(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常用斷言…

windows執行python文件提示SyntaxError: Non-ASCII character ‘\xe9‘ in file 1.py on line 7, but no encoding d

1、問題 windows環境下執行python文件&#xff0c;提示錯誤如下 SyntaxError: Non-ASCII character \xe9 in file 1.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 2、解決辦法 py文件頭部加上 #codingutf-8