Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Hãy thể hiện sự ủng hộ của bạn bằng cách hiển thị các biểu ngữ trên trang này. Chúng tôi cố gắng đảm bảo chỉ những quảng cáo phù hợp, sạch sẽ mới được hiển thị và khi phát hiện thấy bất kỳ quảng cáo khó chịu nào, chúng tôi sẽ cố gắng xóa chúng ngay khi có thể. Quảng cáo là thứ giúp trang web này có thể duy trì hàng ngày trong hơn 18 năm qua. Hãy xem xét Phoronix Premium không có quảng cáo của chúng tôi nếu bạn muốn xem trang web không có quảng cáo trong khi vẫn giúp chúng tôi thực hiện công việc của mình. Quảng cáo là thứ đã cho phép trang web này được duy trì hàng ngày trong hơn 18 năm qua. Chúng tôi cố gắng hết sức để đảm bảo chỉ những quảng cáo sạch, có liên quan mới được hiển thị, khi phát hiện thấy bất kỳ quảng cáo khó chịu nào, chúng tôi sẽ cố gắng loại bỏ chúng càng sớm càng tốt. Nếu bạn muốn xem trang web không có quảng cáo trong khi vẫn hỗ trợ công việc của chúng tôi, vui lòng xem xét Phoronix Premium không có quảng cáo của chúng tôi .

Với hiệu suất được cải thiện và hỗ trợ Linux tốt hơn, Microsoft. NET 7 đã được phát hành
Michael Larabel đã đăng nó trên Microsoft vào ngày 9 tháng 11 năm 2022, lúc 8. 00 giờ sáng Giờ Chuẩn Miền Đông. 42 Bình luận
Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện
Microsoft đã phát hành NET 7 vào thứ ba, mang đến một loạt các tính năng mới trên nền tảng Microsoft cũng như hỗ trợ Linux được cải thiện

Microsoft. NET 7 cung cấp hiệu suất nâng cao, hỗ trợ riêng ARM64, hỗ trợ ứng dụng dành cho thiết bị di động/máy tính để bàn đa nền tảng tốt hơn, cải tiến HTTP/3 cho ứng dụng gốc trên đám mây, hỗ trợ IBM Power 64-bit trên Linux và nhiều giải pháp chạy khác


Truy cập Blog dành cho nhà phát triển của Microsoft để biết các liên kết tải xuống và biết thêm thông tin về việc phát hành Microsoft. MẠNG 7
42 Bình luận

Hiển thị hỗ trợ của bạn. Trang web này chủ yếu được hỗ trợ bởi quảng cáo. Quảng cáo là thứ đã cho phép trang web này được duy trì hàng ngày trong hơn 18 năm qua. Chúng tôi cố gắng hết sức để đảm bảo chỉ những quảng cáo sạch, có liên quan mới được hiển thị, khi phát hiện thấy bất kỳ quảng cáo khó chịu nào, chúng tôi sẽ cố gắng loại bỏ chúng càng sớm càng tốt. Nếu bạn muốn xem trang web không có quảng cáo trong khi vẫn hỗ trợ công việc của chúng tôi, vui lòng xem xét Phoronix Premium không có quảng cáo của chúng tôi .

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Được viết bởi Michael Larabel tại Microsoft vào ngày 9 tháng 11 năm 2022 lúc 08. 00 AM EST. 42 Bình luận

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Microsoft vào thứ ba đã phát hành. NET 7 với sự hỗ trợ Linux được cải thiện, hiệu suất tốt hơn và nhiều tính năng mới trong nền tảng Microsoft này

Microsoft. NET 7 mang lại hiệu suất được cải thiện, nâng cao. NET trên Linux, hỗ trợ riêng cho ARM64, cải tiến năng suất của nhà phát triển, hỗ trợ ứng dụng máy tính để bàn/di động đa nền tảng tốt hơn, cải tiến HTTP/3 cho ứng dụng gốc trên đám mây, hỗ trợ IBM Power 64-bit trên Linux và nhiều giải pháp chạy khác


Tải xuống và biết thêm chi tiết về Microsoft. NET 7 thông qua Blog nhà phát triển của Microsoft

42 Bình luận

  • Nếu đây là lần đầu tiên bạn truy cập, hãy nhớ xem Câu hỏi thường gặp bằng cách nhấp vào liên kết ở trên. Bạn có thể phải đăng ký trước khi bạn có thể đăng bài. Nhấp vào liên kết đăng ký ở trên để tiến hành. Để bắt đầu xem tin nhắn, hãy chọn diễn đàn mà bạn muốn truy cập từ lựa chọn bên dưới

NET 7 giúp ứng dụng của bạn tăng hiệu suất và các tính năng mới cho C# 11/F# 7,. MẠNG LƯỚI, ASP. NET Core/Blazor, API Web, WinForms, WPF, v.v. Với. NET 7, bạn cũng có thể dễ dàng chứa. NET 7, thiết lập quy trình công việc CI/CD trong các hành động GitHub và đạt được khả năng quan sát dựa trên đám mây

Nhờ mã nguồn mở. NET vì nhiều đóng góp của bạn đã giúp hình thành điều này. NET7 phát hành. 28k đóng góp được thực hiện bởi hơn 8900 người đóng góp trong suốt. NET7 phát hành

NET vẫn là một trong những nền tảng , , và đáng tin cậy với khả năng mở rộng. NET bao gồm hơn 330.000 gói

Tải xuống và nâng cấp

Bạn có thể tải về miễn phí. NET 7 phát hành hôm nay cho Windows, macOS và Linux

  • Trình cài đặt và tệp nhị phân
  • Hình ảnh vùng chứa
  • gói Linux
  • ghi chú phát hành
  • Thay đổi đột phá
  • Các vấn đề đã biết
  • Trình theo dõi vấn đề GitHub

NET 7 cung cấp một bản nâng cấp đơn giản nếu bạn đang sử dụng và một số lý do thuyết phục để di chuyển nếu bạn hiện đang duy trì một

Visual Studio 2022 17. 4 cũng có sẵn ngày hôm nay. đang phát triển. NET 7 trong Visual Studio 2022 mang đến cho nhà phát triển công cụ năng suất tốt nhất trong lớp. Để tìm hiểu tính năng mới trong Visual Studio 2022, hãy xem các blog về Visual Studio 2022

Có gì mới trong. MẠNG 7

NET 7 kết hợp với một số sản phẩm, thư viện và nền tảng khác bao gồm

  • ASP. NET lõi 7
  • Khung thực thể lõi 7
  • LƯỚI MAUI
  • biểu mẫu cửa sổ
  • WPF
  • Orleans 7

Trong bài đăng trên blog này, chúng tôi sẽ nêu bật các chủ đề chính mà. NET Teams tập trung vào việc cung cấp

  • Thống nhât
    • một BCL
    • TFM mới
    • Hỗ trợ riêng cho ARM64
    • nâng cao. NET hỗ trợ trên Linux
  • Hiện đại
    • Tiếp tục cải thiện hiệu suất
    • Các cải tiến về năng suất của nhà phát triển, chẳng hạn như quy trình làm việc ưu tiên vùng chứa
    • Xây dựng các ứng dụng dành cho thiết bị di động và máy tính để bàn đa nền tảng từ cùng một cơ sở mã
  • NET dành cho các ứng dụng gốc trên đám mây
    • Dễ dàng xây dựng và triển khai các ứng dụng gốc trên đám mây phân tán
  • Giản dị
    • Đơn giản hóa và viết ít mã hơn với C# 11
    • HTTP/3 và các cải tiến API tối thiểu cho các ứng dụng gốc trên đám mây
  • Màn biểu diễn
    • Nhiều cải tiến hoàn hảo

Dưới đây, chúng tôi sẽ trình bày chi tiết hơn về các chủ đề này và chia sẻ thêm ngữ cảnh về lý do tại sao công việc này lại quan trọng

kịch bản

NET 7 linh hoạt đến mức bạn có thể xây dựng bất kỳ ứng dụng nào trên mọi nền tảng

Hãy làm nổi bật một số kịch bản mà bạn có thể đạt được với. NET bắt đầu từ hôm nay

  • Gọi một hiện có. NET từ mã React đang chạy trong trình duyệt bằng cách bao gồm một. NET được tối ưu hóa để chạy trên WebAssugging
  • được lưu trữ trong cơ sở dữ liệu SQL Server của bạn bằng C# được gõ mạnh
  • Nhanh chóng xây dựng và triển khai điểm cuối REST an toàn được tự động ghi lại bằng OpenAPI bằng cách chỉ viết một vài dòng mã
  • Tạo ứng dụng gốc được sắp xếp hợp lý bằng cách sử dụng trình biên dịch Trước thời hạn (AOT) từ nguồn C# và xuất bản trực tiếp lên hình ảnh vùng chứa
  • Chạy một. NET Core sử dụng API tích hợp để nén và lưu trữ nội dung thành tệp
    Activity.CurrentChanged += CurrentChanged;
    
    void CurrentChanged(object? sender, ActivityChangedEventArgs e)
    {
      Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
    }
    2 thân thiện với Linux
  • Cụ thể hóa tầm nhìn của bạn về ứng dụng dành cho thiết bị di động trên Android, iOS và Windows bằng cách sử dụng một cơ sở mã và thiết kế duy nhất để tạo mã gốc và các thành phần cho từng nền tảng mục tiêu
  • Gặt hái những lợi ích hiệu suất của. NET 7 bằng cách tự động di chuyển các ứng dụng cũ của bạn bằng trợ lý nâng cấp và hiện đại hóa các dịch vụ web Windows Communication Foundation (WCF) của bạn với sự trợ giúp của CoreWCF
  • Giúp các nhà phát triển khởi động các ứng dụng mới dễ dàng hơn bao giờ hết bằng cách sử dụng các mẫu soạn sẵn phản ánh các lựa chọn thiết kế và kiến ​​trúc của bạn
  • Xử lý tổ hợp phím và phím bổ trợ tốt hơn trong Unix/Linux với Console. Đọc khóa

Thống nhât

Thư viện một lớp cơ sở (BCL)

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

NET 7 là bản phát hành chính thứ ba trong. hành trình hợp nhất NET (kể từ. NET5 vào năm 2016)

Với. NET 7, bạn học một lần và sử dụng lại các kỹ năng của mình với một SDK, một Thời gian chạy, một bộ thư viện cơ sở để xây dựng nhiều loại ứng dụng (Đám mây, Web, Máy tính để bàn, Di động, Trò chơi, IoT và AI)

nhắm mục tiêu. MẠNG 7

Khi bạn nhắm mục tiêu một khung trong ứng dụng hoặc thư viện, bạn đang chỉ định bộ API mà bạn muốn cung cấp. Nhắm mục tiêu. NET 7, dễ như thay đổi khung mục tiêu trong dự án của bạn

net7.0

Các ứng dụng nhắm mục tiêu tên khung mục tiêu

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
3 (TFM) sẽ hoạt động trên tất cả các hệ điều hành và kiến ​​trúc CPU được hỗ trợ. Chúng cấp cho bạn quyền truy cập vào tất cả các API trong. NET 7 cộng với một loạt các hệ điều hành cụ thể như

  • mạng7. 0-android
  • mạng7. 0-ios
  • mạng7. 0-maccatalyst
  • mạng7. 0-macos
  • mạng7. 0-tv
  • mạng7. 0 cửa sổ

Các API được hiển thị thông qua TFM

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
3 được thiết kế để hoạt động ở mọi nơi. Nếu bạn từng nghi ngờ liệu một API có được hỗ trợ với. NET 7, bạn luôn có thể xem https. //apisof. mạng lưới/. Đây là một ví dụ về giao diện mới được thêm vào
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
5 mà bạn có thể thấy hiện đã được tích hợp sẵn vào. MẠNG 7

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

CÁNH TAY64

Khi ngành công nghiệp đang hướng tới ARM, thì. MẠNG LƯỚI. Một trong những lợi thế lớn nhất của CPU ARM là hiệu suất năng lượng. Điều này mang lại hiệu suất cao nhất với mức tiêu thụ điện năng thấp nhất. Nói cách khác, bạn có thể làm nhiều hơn với ít hơn. Trong. NET 5, chúng tôi đã mô tả các sáng kiến ​​hiệu suất mà chúng tôi đã thực hiện đối với ARM64. Bây giờ, hai bản phát hành sau chúng tôi muốn chia sẻ với bạn chúng tôi đã đi được bao xa. Mục tiêu liên tục của chúng tôi là kết hợp hiệu năng của x64 với ARM64 để giúp khách hàng của chúng tôi di chuyển. NET cho ARM

Cải tiến thời gian chạy

Một thách thức mà chúng tôi gặp phải khi điều tra x64 và ARM64 là phát hiện ra rằng kích thước bộ đệm L3 không được đọc chính xác từ các máy ARM64. Chúng tôi đã thay đổi phương pháp phỏng đoán của mình để trả về kích thước gần đúng nếu không thể tìm nạp kích thước bộ đệm L3 từ HĐH hoặc BIOS của máy. Giờ đây, chúng tôi có thể ước tính tốt hơn số lượng lõi trên mỗi kích thước bộ đệm L3

Số lõiKích thước bộ đệm L31~44MB5~168MB17~6416MB65+32MB

Tiếp theo là sự hiểu biết của chúng ta về các nguyên tử LSE. Cái nào, nếu bạn chưa biết, cung cấp API nguyên tử để có quyền truy cập độc quyền vào các khu vực quan trọng. Trong các máy x86-x64 có kiến ​​trúc CISC, các thao tác đọc-sửa-ghi (RMW) trên bộ nhớ có thể được thực hiện bằng một lệnh duy nhất bằng cách thêm tiền tố khóa

Tuy nhiên, trên các máy có kiến ​​trúc RISC, các thao tác RMW không được phép và tất cả các thao tác được thực hiện thông qua các thanh ghi. Do đó, đối với các kịch bản đồng thời, chúng có cặp hướng dẫn. “Load Acquire” (ldaxr) giành quyền truy cập độc quyền vào vùng bộ nhớ sao cho không lõi nào khác có thể truy cập và “Store Release” (stlxr) giải phóng quyền truy cập cho các lõi khác truy cập. Giữa các cặp này, các hoạt động quan trọng được thực hiện. Nếu thao tác stlxr không thành công do một số CPU khác hoạt động trên bộ nhớ sau khi bạn tải nội dung bằng ldaxr, sẽ có mã để thử lại (cbnz nhảy lại để thử lại) thao tác

ARM đã giới thiệu hướng dẫn nguyên tử LSE trong v8. 1. Với các hướng dẫn này, các thao tác như vậy có thể được thực hiện với ít mã hơn và nhanh hơn phiên bản truyền thống. Khi chúng tôi kích hoạt tính năng này cho Linux và sau đó mở rộng nó sang Windows, chúng tôi đã thấy hiệu suất đạt được khoảng 45%

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Cải tiến thư viện

Để tối ưu hóa các thư viện sử dụng nội tại, chúng tôi đã thêm các trình trợ giúp đa nền tảng mới. Chúng bao gồm những người trợ giúp cho

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
6,
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
7 và
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
8. Trình trợ giúp đa nền tảng cho phép thống nhất các thuật toán vector hóa bằng cách thay thế nội tại dành riêng cho phần cứng bằng nội tại không phụ thuộc vào phần cứng. Điều này sẽ mang lại lợi ích cho người dùng trên bất kỳ nền tảng nào, nhưng chúng tôi hy vọng ARM64 sẽ mang lại nhiều lợi ích nhất, vì các nhà phát triển không có kiến ​​thức chuyên môn về ARM64 vẫn có thể sử dụng các trình trợ giúp để tận dụng lợi thế nội tại của phần cứng Arm64

Viết lại các API như

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
9 và
Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
0 từ triển khai SSE3 sang triển khai dựa trên Vector có thể cải thiện tới 60%

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Tương tự như vậy, việc chuyển đổi các API khác như

Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
1 và
Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
2 có thể chứng minh hiệu suất đạt được lên tới 35%

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Tác động hiệu suất

Với công việc của chúng tôi trong. NET 7, nhiều MicroBenchmarks được cải thiện từ 10-60%. Khi chúng tôi bắt đầu. NET 7, các yêu cầu mỗi giây (RPS) thấp hơn đối với ARM64, nhưng dần dần vượt qua tính tương đương của x64

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Tương tự như vậy đối với độ trễ (được đo bằng mili giây), chúng tôi sẽ kết nối tính chẵn lẻ của x64

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Để biết thêm chi tiết, hãy xem Cải tiến hiệu suất ARM64 trong. MẠNG 7

nâng cao. NET hỗ trợ trên Linux

NET 6 được bao gồm trong Ubuntu 22. 04 (Jammy) và có thể cài đặt bằng lệnh

Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
3. Ngoài ra, có một hình ảnh vùng chứa siêu nhỏ, được tạo sẵn, được tối ưu hóa có thể được sử dụng ngay lập tức

net7.0
3

Để biết thêm thông tin về quan hệ đối tác của chúng tôi với Canonical và ARM, hãy đọc. NET 6 hiện đã có trong Ubuntu 22. 04

Hỗ trợ IBM Power 64-bit

Ngoài kiến ​​trúc x64 (64-bit Intel/AMD), ARM64 (64-bit ARM) và s390x (64-bit IBM Z),. NET hiện cũng có sẵn cho kiến ​​trúc ppc64le (64-bit IBM Power) nhắm mục tiêu RHEL 8. 7 và RHEL 9. 1

Với khả năng chạy tự nhiên trên Power, hơn 25.000 khách hàng của IBM Power có thể hợp nhất các. NET trên Windows x86 để chạy trên cùng một nền tảng Power như các ứng dụng và cơ sở dữ liệu doanh nghiệp IBM i và AIX của họ. Làm như vậy có thể cải thiện đáng kể tính bền vững với lượng khí thải carbon nhỏ hơn tới 5 lần kết hợp với quy mô thanh toán theo mức sử dụng tại chỗ cho khả năng của RHEL và OpenShift đồng thời mang lại khả năng bảo mật dữ liệu và giao dịch toàn diện cho doanh nghiệp hàng đầu trong ngành

Hiện đại

NET 7 được xây dựng cho các ứng dụng gốc trên đám mây hiện đại, ứng dụng khách di động, dịch vụ cạnh và công nghệ máy tính để bàn. Tạo trải nghiệm di động bằng cách sử dụng một cơ sở mã duy nhất mà không ảnh hưởng đến hiệu suất gốc bằng cách sử dụng. LƯỚI MAUI. Xây dựng Ứng dụng Trang đơn (SPA) đáp ứng chạy trong trình duyệt của bạn và ngoại tuyến dưới dạng Ứng dụng web lũy tiến (PWA) bằng các công nghệ quen thuộc như mẫu C# và Razor. Những trải nghiệm hiện đại nhanh hơn này không chỉ dành cho các ứng dụng mới. Các. NET Upgrade Assistant sẽ cung cấp phản hồi về tính tương thích và trong một số trường hợp, di chuyển hoàn toàn ứng dụng của bạn sang. MẠNG 6 và. MẠNG 7

LƯỚI MAUI

NET MAUI hiện là một phần của. NET 7 với vô số cải tiến và tính năng mới. bạn có thể tìm hiểu về. NET MAUI và cách nó trao quyền cho bạn để xây dựng ứng dụng cho tất cả các thiết bị di động của bạn bằng cách đọc bản mới nhất. Thông báo blog NET MAUI

áo khoác ngoài

Blazor tiếp tục phát triển và. NET 7 bao gồm nhiều cải tiến lớn. Blazor hiện có hỗ trợ xử lý các sự kiện thay đổi vị trí, cải thiện trải nghiệm gỡ lỗi WebAssembly và hỗ trợ sẵn dùng để xác thực bằng OpenID Connect. Để tìm hiểu thêm, hãy đọc các bài đăng blog mới nhất của nhóm Blazor

Trợ lý nâng cấp

Các. NET Upgrade Assistant cung cấp hướng dẫn từng bước, thông tin chi tiết và tự động hóa để đưa các ứng dụng cũ của bạn lên. MẠNG 6 và. MẠNG 7. Trong một số trường hợp, nó có thể thực hiện việc di chuyển cho bạn. Nó giúp giảm thời gian và độ phức tạp khi hiện đại hóa các cơ sở mã cũ hơn. Ví dụ: tìm hiểu cách đưa các ứng dụng WCF của bạn đến. NET Core với sự trợ giúp của CoreWCF. Với. NET 7, trải nghiệm được cải thiện bao gồm

  • ASP. NET sang ASP. NET lõi
    • Hệ thống. Bộ điều hợp web (xem trước)
    • Di chuyển gia tăng (xem trước)
  • Đã thêm nhiều trình phân tích và trình sửa mã cho thư viện WinForms, WPF và bảng điều khiển/lớp
  • Khả năng phân tích nhị phân
  • Hỗ trợ UWP cho Windows App SDK và WinUI

Sẵn sàng chuyển ứng dụng của bạn lên phiên bản mới nhất và hoạt động nhanh nhất. NET cho đến nay?

NET 6 Di chuyển nổi bật

Sau. NET 6 đã được công bố vào năm ngoái, đã có nhiều hành trình thành công đến phiên bản mới nhất của. MẠNG LƯỚI. Những câu chuyện này nêu bật lợi ích của những cải tiến đáng kể đối với việc sử dụng CPU, tăng yêu cầu mỗi giây (RPS), sử dụng nhóm luồng tốt hơn, giảm kích thước nhị phân, thời gian khởi động nhanh hơn, quản lý phụ thuộc đơn giản hóa, giảm nợ kỹ thuật trong tương lai, giảm chi phí cơ sở hạ tầng và quan trọng nhất. sự hài lòng về kỹ thuật và năng suất

  • Hành trình Azure Cosmos DB tới. MẠNG 6
  • Hành trình trực tuyến của Microsoft Exchange đến. NET lõi
  • Hành trình OneService đến. MẠNG 6
  • Hành trình của Microsoft Graph tới. MẠNG 6
  • Microsoft Teams “MiddleTier” thành. NET lõi
  • Hành trình của Cơ sở hạ tầng Microsoft Teams và Dịch vụ Truyền thông Azure. MẠNG 6
  • Hành trình đến nền tảng chiến dịch quảng cáo Bing. MẠNG 6
  • Hành trình của Stack Overflow tới. MẠNG 6

Có một câu chuyện về việc chuyển sang phiên bản mới nhất của. MẠNG LƯỚI?

NET dành cho các ứng dụng gốc trên đám mây

NET 7 giúp việc xây dựng các ứng dụng gốc trên đám mây trở nên dễ dàng hơn bao giờ hết. Sử dụng các dịch vụ được kết nối của Visual Studio để kết nối an toàn với dịch vụ dữ liệu và mã hóa chuỗi kết nối của bạn một cách an toàn trong tệp bí mật người dùng hoặc Azure Key Vault. Xây dựng ứng dụng của bạn trực tiếp vào hình ảnh vùng chứa. Sử dụng Entity Framework 7 để viết các truy vấn Truy vấn Tích hợp Ngôn ngữ (LINQ) được gõ mạnh sử dụng hỗ trợ JSON của SQL Server để trích xuất nhanh nội dung từ các tài liệu JSON được lưu trữ trong cơ sở dữ liệu quan hệ của bạn. Cung cấp các tài liệu JSON an toàn thông qua các điểm cuối được xác thực chỉ bằng một vài dòng mã với trải nghiệm API tối thiểu. Thu thập thông tin chuyên sâu về ứng dụng đang chạy của bạn với Open Telemetry

Hỗ trợ Azure vào Ngày Zero

không chỉ là. NET 7 tuyệt vời để xây dựng các ứng dụng gốc trên đám mây; . NET 7 hôm nay, cho bản phát hành thứ ba liên tiếp, như. MẠNG 5. 0 và 6. 0. Trong suốt tuần đầu tiên phát hành, bạn có thể thấy thời gian khởi động lâu hơn một chút đối với. NET 7, như. NET 7 SDK sẽ được cài đặt kịp thời cho những khách hàng tạo Dịch vụ ứng dụng mới bằng cách sử dụng. MẠNG 7. Ngoài ra, nếu bạn đang chạy một. NET 7, chỉ cần khởi động lại Dịch vụ ứng dụng của bạn sẽ cập nhật cho bạn các bit GA

Hỗ trợ vùng chứa tích hợp

Mức độ phổ biến và mức độ sử dụng thực tế của các container đang tăng lên và đối với nhiều công ty, chúng đại diện cho cách triển khai lên đám mây ưa thích. Tuy nhiên, làm việc với vùng chứa sẽ thêm công việc mới vào công việc tồn đọng của nhóm, bao gồm xây dựng và xuất bản hình ảnh, kiểm tra tính bảo mật và tuân thủ cũng như tối ưu hóa hiệu suất của hình ảnh. Chúng tôi tin rằng có cơ hội để tạo ra trải nghiệm tốt hơn, hợp lý hơn với. thùng chứa NET

Giờ đây, bạn có thể tạo các phiên bản được đóng gói trong các ứng dụng của mình chỉ với

Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
4. Chúng tôi đã xây dựng giải pháp này với mục tiêu tích hợp liền mạch với logic xây dựng hiện có, tận dụng hiệu suất thời gian chạy và công cụ C# phong phú của riêng chúng tôi, đồng thời được tích hợp ngay trong hộp của giải pháp này. NET SDK để cập nhật thường xuyên

Hình ảnh vùng chứa hiện là loại đầu ra được hỗ trợ của. NET SDK

net7.0
5

Để tìm hiểu thêm về hỗ trợ vùng chứa tích hợp, hãy xem Thông báo hỗ trợ vùng chứa tích hợp cho. NET SDK

Microsoft Orleans

Microsoft Orleans 7. 0 sẽ cung cấp một mô hình lập trình đơn giản hơn với các Hạt “đối tượng CLR cũ đơn giản” (POCO), mang lại hiệu suất tốt hơn tới 150% so với 3. x, đồng thời giới thiệu các cải tiến về tuần tự hóa và tính bất biến mới. ASP. NET Core có thể thêm trạng thái phân tán một cách đơn giản bằng cách sử dụng Orleans và tự tin rằng các ứng dụng của họ sẽ mở rộng theo chiều ngang mà không cần thêm độ phức tạp. Chúng tôi sẽ tiếp tục đầu tư để đưa các tính năng của Orleans đến gần hơn với ASP. NET để đảm bảo các ứng dụng web và API của bạn đã sẵn sàng cho quy mô đám mây, các kịch bản lưu trữ phân tán hoặc thậm chí là triển khai nhiều đám mây. Với sự hỗ trợ cho hầu hết các cơ chế lưu trữ và cơ sở dữ liệu phổ biến và khả năng chạy mọi nơi ASP. NET Core có thể chạy, Orleans là một lựa chọn tuyệt vời để cho phép bạn. NET với các khả năng phân tán, gốc trên nền tảng đám mây mà không cần tìm hiểu khung hoặc bộ công cụ mới. Tìm hiểu thêm về Orleans 7

khả năng quan sát

Mục tiêu của khả năng quan sát là giúp bạn hiểu rõ hơn về trạng thái của ứng dụng khi ứng dụng mở rộng quy mô và độ phức tạp kỹ thuật tăng lên. . NET đã chấp nhận OpenTelemetry đồng thời thực hiện các cải tiến sau đây trong. MẠNG 7

Hoạt động giới thiệu. Sự kiện thay đổi hiện tại

Một triển khai điển hình của theo dõi phân tán sử dụng một

Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
5 để theo dõi “bối cảnh nhịp” của các chuỗi được quản lý. Các thay đổi đối với bối cảnh nhịp được theo dõi bằng cách sử dụng hàm tạo
Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
5 có tham số
Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
7. Tuy nhiên, với việc
Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
8 trở thành tiêu chuẩn để biểu thị các khoảng thời gian được sử dụng bởi OpenTelemetry, không thể đặt trình xử lý thay đổi giá trị vì ngữ cảnh được theo dõi qua
Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
9. Thay vào đó, sự kiện thay đổi mới có thể được sử dụng để nhận thông báo mong muốn

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}

Phơi bày các thuộc tính hoạt động của người biểu diễn

Các phương pháp mới được tiết lộ sau đây có thể được sử dụng trong các tình huống quan trọng về hiệu suất để liệt kê các thuộc tính

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
31,
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
32 và
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
33 của
Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}
8 mà không có bất kỳ phân bổ bổ sung nào và quyền truy cập vào mục hiệu suất

Activity a = new Activity("Root");

a.SetTag("key1", "value1");
a.SetTag("key2", "value2");

foreach (ref readonly KeyValuePair tag in a.EnumerateTagObjects())
{
  Console.WriteLine($"{tag.Key}, {tag.Value}");
}

Phơi bày các phương thức liệt kê ActivityEvent và ActivityLink của người biểu diễn

Tương tự như trên, các đối tượng Thẻ

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
34 và
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
35 cũng được hiển thị để giảm bất kỳ phân bổ bổ sung nào cho quyền truy cập mục hiệu suất

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
3

Giản dị

C#11 & F#7

Các bổ sung mới nhất cho ngôn ngữ C# và F# là C# 11 và F# 7. C# 11 làm cho các tính năng mới như toán học chung trở nên khả thi trong khi đơn giản hóa mã của bạn với các cải tiến khởi tạo đối tượng, chuỗi ký tự thô, v.v.

Toán chung

NET 7 giới thiệu các giao diện chung liên quan đến toán học mới cho thư viện lớp cơ sở. Tính khả dụng của các giao diện này có nghĩa là bạn có thể hạn chế một tham số loại của một loại hoặc phương thức chung là "giống như số". Ngoài ra, C# 11 trở lên cho phép bạn xác định các thành viên giao diện ảo tĩnh. Bởi vì các toán tử phải được khai báo là tĩnh, tính năng C# mới này cho phép các toán tử được khai báo trong các giao diện mới cho các loại giống như số

Cùng với nhau, những cải tiến này cho phép bạn thực hiện các phép toán một cách tổng quát—nghĩa là, mà không cần biết chính xác loại mà bạn đang làm việc. Ví dụ: nếu bạn muốn viết một phương thức cộng hai số, trước đó bạn phải thêm quá tải phương thức cho mỗi loại (ví dụ:

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
36 và
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
37. Bây giờ bạn có thể viết một phương thức chung, duy nhất, trong đó tham số kiểu bị ràng buộc là một kiểu giống như số

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
2

Trong phương thức này, tham số loại T bị ràng buộc là loại triển khai giao diện

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
38 mới.
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
38 triển khai giao diện
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
20, chứa giao diện
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
21. Điều đó cho phép phương pháp cộng chung hai số. Phương pháp này có thể được sử dụng với bất kỳ. NET, bởi vì tất cả chúng đã được cập nhật để triển khai
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
38 trong. MẠNG 7

Các tác giả thư viện sẽ được hưởng lợi nhiều nhất từ ​​các giao diện toán học chung, bởi vì họ có thể đơn giản hóa cơ sở mã của mình bằng cách loại bỏ các tình trạng quá tải “dư thừa”. Các nhà phát triển khác sẽ được hưởng lợi một cách gián tiếp vì các API mà họ sử dụng có thể bắt đầu hỗ trợ nhiều loại hơn

Kiểm tra tài liệu về Generic Math để biết thêm thông tin về các API cốt lõi được hiển thị bởi mỗi giao diện

Chữ chuỗi thô

Hiện đã có định dạng mới cho chuỗi ký tự. Chuỗi ký tự thô có thể chứa văn bản tùy ý, bao gồm khoảng trắng, dòng mới, dấu ngoặc kép được nhúng và các ký tự đặc biệt khác mà không yêu cầu trình tự thoát. Một chuỗi ký tự thô bắt đầu bằng ít nhất ba ký tự trích dẫn kép (“””) và kết thúc bằng cùng một số ký tự trích dẫn kép

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
8

thư viện NET

Nhiều. NET của bên thứ nhất đã thấy những cải tiến đáng kể trong. NET7 phát hành. Bạn sẽ thấy hỗ trợ cho chú thích nullable dành cho Microsoft. Tiện ích mở rộng. * gói, tùy chỉnh hợp đồng và phân cấp loại cho Hệ thống. Chữ. Json và các API Tar mới để giúp bạn ghi dữ liệu ở định dạng Lưu trữ băng từ (TAR) để đặt tên cho một số

Chú thích Nullable cho Microsoft. Tiện ích mở rộng

Tất cả Microsoft. Tiện ích mở rộng. * các thư viện hiện chứa tính năng chọn tham gia C# 8 cho phép trình biên dịch theo dõi tính vô hiệu của loại tham chiếu để nắm bắt các tham chiếu null tiềm năng. Điều này giúp bạn giảm thiểu khả năng mã của bạn khiến bộ thực thi gặp lỗi

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
23

Hệ thống. Thành phần. lưu trữ

Một API mới đã được thêm vào để cho phép một phiên bản đối tượng duy nhất vào vùng chứa

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
24 cung cấp chức năng tương tự như các giao diện kế thừa như
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
25 thông qua API
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
26

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
3

Thêm Micro giây và Nano giây vào TimeStamp, DateTime, DateTimeOffset và TimeOnly

Trước. NET 7, mức tăng thời gian thấp nhất có sẵn trong các cấu trúc ngày và giờ khác nhau là "đánh dấu" có sẵn trong thuộc tính Ticks. Để tham khảo, một lần đánh dấu là 100ns. Theo truyền thống, các nhà phát triển phải thực hiện tính toán trên giá trị “đánh dấu” để xác định giá trị micro giây và nano giây. Trong. NET 7, chúng tôi đã giới thiệu cả micro giây và nano giây cho việc triển khai ngày và giờ

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
4

Microsoft. Tiện ích mở rộng. Bộ nhớ đệm

Chúng tôi đã thêm hỗ trợ số liệu cho

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
27, đây là API mới của
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
28 chứa các lần truy cập, bỏ lỡ bộ đệm và kích thước ước tính cho
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
27. Bạn có thể lấy một phiên bản của
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
28 bằng cách gọi
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
81 khi cờ
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
82 được bật

API

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
81 cho phép nhà phát triển ứng dụng sử dụng bộ đếm sự kiện hoặc API số liệu để theo dõi số liệu thống kê cho một hoặc nhiều bộ nhớ cache

net7.0
30

Sau đó, bạn có thể xem số liệu thống kê bên dưới bằng công cụ

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
84

net7.0
31

Hệ thống. định dạng. API Tar

Chúng tôi đã thêm một tổ hợp

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
85 mới chứa các API đa nền tảng cho phép đọc, viết, lưu trữ và giải nén các kho lưu trữ Tar. Các API này thậm chí còn được SDK sử dụng để tạo vùng chứa làm mục tiêu xuất bản

net7.0
32

Bộ chuyển đổi loại

Hiện tại có các bộ chuyển đổi loại tiếp xúc cho các loại nguyên thủy mới được thêm vào

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
86,
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
87,
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
88,
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
89 và
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
30

net7.0
33

Đây là những bộ chuyển đổi hữu ích để dễ dàng chuyển đổi sang các loại nguyên thủy hơn

net7.0
34

Hệ thống. Chữ. Tùy chỉnh hợp đồng Json

Hệ thống. Chữ. Json xác định làm thế nào một nhất định. NET có nghĩa là được tuần tự hóa và giải tuần tự hóa bằng cách xây dựng hợp đồng JSON cho loại đó. Hợp đồng được lấy từ hình dạng của loại — chẳng hạn như các hàm tạo, thuộc tính và trường có sẵn của nó và liệu nó có triển khai

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
31 hay
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
32 hay không — tại thời điểm chạy bằng cách sử dụng sự phản chiếu hoặc tại thời điểm biên dịch bằng cách sử dụng trình tạo nguồn. Trong các bản phát hành trước, người dùng có thể thực hiện các điều chỉnh hạn chế đối với hợp đồng dẫn xuất bằng cách sử dụng Hệ thống. Chữ. Chú thích thuộc tính Json, giả sử chúng có thể sửa đổi khai báo kiểu

Siêu dữ liệu hợp đồng cho một loại

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
33 nhất định được biểu diễn bằng cách sử dụng
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
34, trong các phiên bản trước được dùng làm mã thông báo mờ được sử dụng riêng trong API trình tạo nguồn. bắt đầu từ. NET 7, hầu hết các khía cạnh của siêu dữ liệu hợp đồng
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
35 đã được hiển thị và khiến người dùng có thể sửa đổi. Tùy chỉnh hợp đồng cho phép người dùng viết logic giải quyết hợp đồng JSON của riêng họ bằng cách sử dụng triển khai giao diện
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
5

net7.0
35

Trình giải quyết hợp đồng trả về một phiên bản

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
35 đã định cấu hình cho tổ hợp
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
38 và
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
39 đã cho. Nó có thể trả về
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
40 nếu trình phân giải không hỗ trợ siêu dữ liệu cho loại đầu vào đã chỉ định

Giải pháp hợp đồng được thực hiện theo mặc định, bộ nối tiếp dựa trên sự phản chiếu hiện được hiển thị thông qua lớp

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
41, thực hiện
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
5. Lớp này cho phép người dùng mở rộng độ phân giải dựa trên phản xạ mặc định với các sửa đổi tùy chỉnh hoặc kết hợp nó với các trình phân giải khác (chẳng hạn như các trình phân giải do nguồn tạo ra)

Bắt đầu từ. NET 7, lớp

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
43 được sử dụng trong tạo nguồn cũng triển khai
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
5. Để tìm hiểu thêm về trình tạo nguồn, hãy xem Cách sử dụng trình tạo nguồn trong Hệ thống. Chữ. Json

Phiên bản

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
39 có thể được định cấu hình bằng trình phân giải tùy chỉnh bằng thuộc tính
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
46 mới

net7.0
36

Kiểm tra bài đăng trên blog để biết thêm chi tiết về Tùy chỉnh hợp đồng

Hệ thống. Chữ. Phân cấp loại Json

Hệ thống. Chữ. Json hiện hỗ trợ tuần tự hóa đa hình và giải tuần tự hóa các hệ thống phân cấp loại do người dùng xác định. Điều này có thể được kích hoạt bằng cách trang trí lớp cơ sở của một hệ thống phân cấp kiểu với

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
47 mới

net7.0
37

Cấu hình này cho phép tuần tự hóa đa hình cho

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
48, đặc biệt khi loại thời gian chạy là
Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
49

net7.0
38

Lưu ý rằng điều này không kích hoạt quá trình khử lưu huỳnh đa hình vì tải trọng sẽ bị ngắt làm tròn dưới dạng

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
48

net7.0
39

Xem bài đăng trên blog để biết thêm chi tiết về Phân cấp loại

NET SDK

Các. NET SDK tiếp tục bổ sung các tính năng mới để giúp bạn làm việc hiệu quả hơn bao giờ hết. Trong. NET 7, chúng tôi cải thiện trải nghiệm của bạn với. NET CLI, tạo các mẫu và quản lý các gói của bạn ở một vị trí trung tâm

Trình phân tích cú pháp CLI và Hoàn thành tab

Lệnh

net7.0
301 đã được cung cấp một giao diện nhất quán và trực quan hơn cho nhiều lệnh con mà người dùng biết và yêu thích. Ngoài ra còn có hỗ trợ hoàn thành tab của các tùy chọn và đối số mẫu. Giờ đây, CLI đưa ra phản hồi về các đối số và tùy chọn hợp lệ khi người dùng nhập

Đây là kết quả trợ giúp mới làm ví dụ

net7.0
50

net7.0
302 đã hỗ trợ hoàn thành tab trong một thời gian dài với các trình bao phổ biến như PowerShell, bash, zsh và cá để kể tên một số. Tuy nhiên, tùy thuộc vào các lệnh dotnet riêng lẻ để triển khai các lần hoàn thành có ý nghĩa. Vì. NET 7, lệnh
net7.0
301 đã học cách cung cấp tính năng hoàn thành tab

net7.0
51

Điều này có thể hữu ích để bạn đưa ra lựa chọn khi tạo mới. NET để biết những tùy chọn và đối số nào có sẵn cho bạn

net7.0
52

Ngoài ra, những tùy chọn và đối số phổ biến nào thường bị nhầm lẫn hoặc không được hỗ trợ cho lệnh đã cho. Thay vào đó, bạn chỉ được hiển thị những gì được hỗ trợ trong phiên bản hiện tại của. CLI MẠNG

net7.0
53

Tạo mẫu

NET 7 thêm khái niệm ràng buộc vào. NET mẫu. Các ràng buộc cho phép bạn xác định ngữ cảnh cho phép các mẫu của bạn, điều này giúp công cụ mẫu xác định mẫu nào sẽ hiển thị trong các lệnh như dotnet new list. Đối với bản phát hành này, chúng tôi đã thêm hỗ trợ cho ba loại ràng buộc

  • Hệ điều hành. Giới hạn các mẫu dựa trên hệ điều hành của người dùng
  • Máy chủ công cụ mẫu. Giới hạn các mẫu dựa trên máy chủ nào đang thực thi công cụ mẫu. Đây thường là. NET CLI hoặc kịch bản được nhúng như Hộp thoại dự án mới trong Visual Studio hoặc Visual Studio cho Mac
  • Khối lượng công việc đã cài đặt. Yêu cầu rằng quy định. NET SDK được cài đặt trước khi mẫu có sẵn

Trong mọi trường hợp, việc mô tả các ràng buộc này cũng dễ như thêm một phần ràng buộc mới vào tệp cấu hình của mẫu của bạn

net7.0
54

Chúng tôi cũng đã thêm một khả năng mới cho các tham số lựa chọn. Đây là khả năng người dùng chỉ định nhiều giá trị trong một lựa chọn. Điều này có thể được sử dụng giống như cách có thể sử dụng enum kiểu Cờ. Các ví dụ phổ biến của loại tham số này có thể là

  • Chọn tham gia nhiều hình thức xác thực trên mẫu web
  • Chọn nhiều nền tảng mục tiêu (iOS, Android, web) cùng một lúc trong các mẫu MAUI

Chọn tham gia hành vi này cũng đơn giản như thêm

net7.0
304 vào định nghĩa tham số trong cấu hình mẫu của bạn. Sau khi thực hiện xong, bạn sẽ có quyền truy cập vào một số chức năng của trình trợ giúp để sử dụng trong nội dung của mẫu cũng như giúp phát hiện các giá trị cụ thể mà người dùng đã chọn

Quản lý gói trung tâm

Quản lý phụ thuộc là một tính năng cốt lõi của NuGet. Quản lý các phụ thuộc cho một dự án có thể dễ dàng. Việc quản lý các thành phần phụ thuộc cho các giải pháp đa dự án có thể gặp khó khăn khi chúng bắt đầu mở rộng về quy mô và độ phức tạp. Trong các trường hợp bạn quản lý các phần phụ thuộc chung cho nhiều dự án khác nhau, bạn có thể tận dụng các tính năng quản lý gói trung tâm của NuGet để thực hiện tất cả những điều này một cách dễ dàng tại một vị trí duy nhất

Để bắt đầu với quản lý gói trung tâm, bạn có thể tạo tệp

net7.0
305 ở thư mục gốc của giải pháp và đặt thuộc tính MSBuild
net7.0
306 thành true

Bên trong, bạn có thể xác định từng phiên bản gói tương ứng cần có cho giải pháp của mình bằng cách sử dụng các phần tử

net7.0
307 xác định phiên bản và ID gói

net7.0
55

Trong một dự án của giải pháp, sau đó, bạn có thể sử dụng cú pháp

net7.0
308 tương ứng mà bạn biết và yêu thích, nhưng không có thuộc tính Phiên bản để suy ra phiên bản được quản lý tập trung thay thế

net7.0
56

Màn biểu diễn

Hiệu suất đã là một phần quan trọng của mọi. phát hành NET. Hàng năm, các. NET xuất bản một blog về những cải tiến mới nhất. Đây là một lời giới thiệu ngắn từ bài đăng hiệu suất mới nhất

TL; DR. . NET 7 nhanh. Rất nhanh. Bản phát hành này có hàng nghìn PR ảnh hưởng đến hiệu suất đã được đưa vào thời gian chạy và các thư viện cốt lõi, đừng bận tâm đến tất cả các cải tiến trong ASP. NET Core và Windows Forms và Entity Framework và hơn thế nữa. Đó là cách nhanh nhất. NET bao giờ hết. Nếu người quản lý của bạn hỏi bạn tại sao dự án của bạn nên nâng cấp lên. NET 7, bạn có thể nói “ngoài tất cả các chức năng mới trong bản phát hành,. NET 7 siêu nhanh. ” – Stephen Toub

Dưới đây là một bản tóm tắt ngắn về một số cải tiến hiệu suất cho trình biên dịch JIT. Nếu bạn muốn tìm hiểu sâu về tất cả các thay đổi, hãy xem Cải tiến hiệu suất trong. MẠNG 7

Thay thế ngăn xếp (OSR)

Thay thế ngăn xếp (OSR) cho phép bộ thực thi thay đổi mã được thực thi bởi các phương thức hiện đang chạy ở giữa quá trình thực thi phương thức, mặc dù các phương thức đó đang hoạt động “trên ngăn xếp. ” Nó phục vụ như một sự bổ sung cho việc biên dịch theo tầng

OSR cho phép các phương thức chạy dài chuyển sang các phiên bản được tối ưu hóa hơn trong quá trình thực thi, do đó, bộ thực thi có thể nhanh chóng JIT tất cả các phương thức lúc đầu và sau đó chuyển sang các phiên bản được tối ưu hóa hơn khi các phương thức đó được gọi thường xuyên thông qua quá trình biên dịch theo tầng hoặc có các vòng lặp chạy dài xuyên suốt

OSR cải thiện thời gian khởi động. Hầu như tất cả các phương pháp hiện nay ban đầu được sử dụng bởi JIT nhanh. Chúng tôi đã thấy thời gian khởi động được cải thiện 25% trong các ứng dụng nặng như Avalonia “IL” spy và các tiêu chuẩn TechEmpower khác nhau mà chúng tôi theo dõi cho thấy thời gian cho yêu cầu đầu tiên được cải thiện từ 10-30%

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

OSR cũng có thể cải thiện hiệu suất của các ứng dụng và đặc biệt là các ứng dụng sử dụng Dynamic PGO, vì các phương thức có vòng lặp hiện được tối ưu hóa tốt hơn. Ví dụ: microbenchmark

net7.0
309 cho thấy sự cải thiện đáng kể khi bật OSR

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

Tối ưu hóa theo hướng dẫn hồ sơ (PGO)

Tối ưu hóa theo hướng dẫn hồ sơ (PGO) đã xuất hiện từ lâu trong một số ngôn ngữ và trình biên dịch. Ý tưởng cơ bản là bạn biên dịch ứng dụng của mình, yêu cầu trình biên dịch đưa thiết bị đo đạc vào ứng dụng để theo dõi các mẩu thông tin thú vị khác nhau. Sau đó, bạn đặt ứng dụng của mình qua các bước của ứng dụng, chạy qua các tình huống phổ biến khác nhau, khiến công cụ đó "lập hồ sơ" điều gì sẽ xảy ra khi ứng dụng được thực thi và kết quả của điều đó sau đó được lưu lại. Sau đó, ứng dụng được biên dịch lại, cung cấp các kết quả thiết bị đó trở lại trình biên dịch và cho phép ứng dụng tối ưu hóa ứng dụng theo đúng cách ứng dụng dự kiến ​​sẽ được sử dụng

Cách tiếp cận PGO này được gọi là “PGO tĩnh”, vì tất cả thông tin đều được thu thập trước khi triển khai thực tế và đó là điều. NET đã hoạt động dưới nhiều hình thức khác nhau trong nhiều năm. Sự phát triển thú vị trong. NET là “PGO động”, được giới thiệu trong. NET 6, nhưng bị tắt theo mặc định

Dynamic PGO tận dụng lợi thế của việc biên dịch theo tầng. JIT cung cấp mã bậc 0 để theo dõi số lần phương thức được gọi hoặc trong trường hợp vòng lặp, số lần vòng lặp thực thi. Biên dịch theo tầng có thể tạo ra nhiều khả năng khác nhau. Ví dụ: nó có thể theo dõi chính xác loại cụ thể nào được sử dụng làm mục tiêu của một giao diện gửi đi và sau đó, ở cấp 1, chuyên biệt hóa mã để mong đợi các loại phổ biến nhất (điều này được gọi là "ảo hóa được bảo vệ" hoặc GDV . Bạn có thể thấy điều này trong ví dụ nhỏ này. Đặt biến môi trường

net7.0
310 thành 1 rồi chạy trên. MẠNG 7

net7.0
57

Cải tiến chính mà bạn nhận được với PGO là nó hiện hoạt động với OSR trong. MẠNG 7. Điều này có nghĩa là các phương thức chạy nóng thực hiện điều phối giao diện có thể nhận được các tối ưu hóa ảo hóa/nội tuyến này

Khi PGO bị vô hiệu hóa, bạn sẽ nhận được thông lượng hiệu suất tương tự cho. MẠNG 6 và. MẠNG 7

MethodRuntimeMeanRatioDelegatePGO. MẠNG 6. 01. 665 ns1. 00Đại biểuPGO. MẠNG 7. 01. 659 ns1. 00

Nhưng hình ảnh thay đổi khi bạn kích hoạt PGO động trong một. csproj qua

net7.0
311 hoặc biến môi trường của
net7.0
312. . NET 6 nhanh hơn ~14%, nhưng. NET 7 nhanh hơn ~3 lần

MethodRuntimeMeanRatioDelegatePGO. MẠNG 6. 01. 427. 7 ns1. 00Đại biểuPGO. MẠNG 7. 0539. 00. 38

AOT gốc

Đối với nhiều người, từ “hiệu suất” trong ngữ cảnh của phần mềm là về thông lượng. Một cái gì đó thực thi nhanh như thế nào? . Nhưng có nhiều khía cạnh khác để thực hiện. Nó tiêu thụ bao nhiêu bộ nhớ?

Và sau đó là những mối quan tâm liên quan. Để đạt được những mục tiêu này, những phụ thuộc nào được yêu cầu? . MẠNG 7

NET từ lâu đã hỗ trợ tạo mã AOT. Ví dụ,. NET Framework có nó ở dạng

net7.0
313 và. NET Core có nó ở dạng
net7.0
314. Cả hai giải pháp đó đều liên quan đến một tiêu chuẩn. NET có một số IL của nó đã được biên dịch thành mã hợp ngữ, nhưng không phải tất cả các phương thức đều có mã hợp ngữ được tạo cho chúng, nhiều thứ có thể làm mất hiệu lực mã hợp ngữ đã được tạo, bên ngoài. NET mà không có bất kỳ mã hợp ngữ gốc nào có thể được tải, v.v., và trong tất cả các trường hợp đó, thời gian chạy tiếp tục sử dụng trình biên dịch JIT. AOT bản địa là khác nhau. Đó là một sự phát triển của CoreRT, bản thân nó là một sự phát triển của. NET Native và hoàn toàn không có JIT

Tệp nhị phân có được từ việc xuất bản bản dựng là tệp thực thi hoàn toàn độc lập ở định dạng tệp dành riêng cho nền tảng của nền tảng đích (ví dụ: COFF trên Windows, ELF trên Linux, Mach-O trên macOS) không có phụ thuộc bên ngoài nào khác ngoài tiêu chuẩn đó . Và nó hoàn toàn có nguồn gốc. không có IL trong tầm nhìn, không có JIT, không có gì. Tất cả mã bắt buộc được biên dịch và/hoặc liên kết thành tệp thực thi, bao gồm cùng một GC được sử dụng với tiêu chuẩn. NET và thời gian chạy tối thiểu cung cấp các dịch vụ xung quanh luồng và những thứ tương tự

Tất cả điều đó mang lại lợi ích to lớn. thời gian khởi động cực nhanh, triển khai nhỏ và hoàn toàn khép kín và khả năng chạy ở những nơi mà trình biên dịch JIT không cho phép (vì các trang bộ nhớ có thể ghi được sau đó không thể thực thi được). Nó cũng mang lại những hạn chế. Không có JIT có nghĩa là không tải động các tập hợp tùy ý (ví dụ:

net7.0
315) và không phát ra phản xạ (ví dụ:
net7.0
316) và với mọi thứ được biên dịch và liên kết trong ứng dụng, điều đó có nghĩa là nhiều chức năng hơn được sử dụng (hoặc có thể được sử dụng) và . Ngay cả với những hạn chế đó, đối với một loại ứng dụng nhất định, AOT bản địa là một bổ sung cực kỳ thú vị và đáng hoan nghênh cho. MẠNG 7

Ngày nay, AOT bản địa tập trung vào các ứng dụng bảng điều khiển, vì vậy hãy tạo một ứng dụng bảng điều khiển

net7.0
58

Bây giờ bạn đã có ứng dụng bảng điều khiển “Xin chào thế giới”. Để cho phép xuất bản ứng dụng với AOT gốc, hãy chỉnh sửa. csproj để bao gồm những điều sau đây trong

net7.0
317 hiện có

net7.0
59

Ứng dụng hiện được định cấu hình đầy đủ để có thể nhắm mục tiêu AOT bản địa. Tất cả những gì còn lại là xuất bản. Nếu bạn muốn xuất bản lên thời gian chạy

net7.0
318, bạn có thể sử dụng lệnh sau

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
0

Điều này tạo ra một tệp thực thi trong thư mục xuất bản đầu ra

Activity.CurrentChanged += CurrentChanged;

void CurrentChanged(object? sender, ActivityChangedEventArgs e)
{
  Console.WriteLine($"Activity.Current value changed from Activity:  {e.Previous.OperationName} to Activity: {e.Current.OperationName}");
}
1

Đó ~3. 5MB. exe là tệp thực thi và. pdb bên cạnh là thông tin gỡ lỗi, không cần thiết khi triển khai ứng dụng. Bây giờ bạn có thể sao chép

net7.0
319 đó vào bất kỳ máy Windows 64-bit nào, bất kể. NET có thể được cài đặt hoặc không ở bất kỳ đâu trên hộp và ứng dụng sẽ chạy

NET 7 được hỗ trợ

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

NET 7 được hỗ trợ chính thức bởi Microsoft. Nó được gắn nhãn là bản phát hành Hỗ trợ thời hạn tiêu chuẩn (STS) sẽ được hỗ trợ trong 18 tháng. đánh số lẻ. NET là các bản phát hành STS được hỗ trợ và vá lỗi miễn phí trong sáu tháng sau bản phát hành STS hoặc LTS tiếp theo. Xem của chúng tôi. NET và. NET Core Support Lifecycle để biết thêm chi tiết

Nhận xét

Giúp chúng tôi định hình. NET 8 và các bản phát hành trong tương lai bằng cách nâng cấp các vấn đề trên GitHub, cung cấp phản hồi về Cộng đồng nhà phát triển và chia sẻ của bạn. NET và các dự án với những người khác trong cộng đồng

Chia sẻ suy nghĩ của bạn và được thông báo về những tin tức mới nhất xung quanh. NET 7 với #dotnet7

NET Conf 2022

Hãy chắc chắn để điều chỉnh vào. NET Conf 2022. Đây là sự kiện dành cho nhà phát triển ảo, kéo dài ba ngày, miễn phí nhằm kỷ niệm các bản phát hành chính của. MẠNG LƯỚI. Tham gia với chúng tôi hôm nay, ngày 8 tháng 11 đến ngày 10 tháng 11 để tìm hiểu về. NET 7 trực tiếp từ các nhóm sản phẩm tại Microsoft và. NET đằng sau việc phát hành. . NET Conf có hơn 80 phiên bao gồm vô số tính năng mới hỗ trợ ứng dụng của bạn được xây dựng bằng. MẠNG 7

Tải xuống. NET 7 hôm nay

Chúng tôi chỉ muốn kết thúc bằng cách nói

Microsoft. NET 7 được phát hành với sự hỗ trợ Linux tốt hơn, hiệu suất được cải thiện

NET không thể tồn tại nếu không có cộng đồng. Các. NET là một dự án thông qua sự đóng góp độc đáo và sáng tạo của mọi người. Những thành tựu to lớn và sự hào phóng này đến từ sự hỗ trợ và quan tâm đến những người xung quanh chúng ta. Cảm ơn bạn đã tham gia, chia sẻ và thuộc về. cộng đồng mạng

NET 7 là một bản phát hành chính giúp cải thiện chất lượng cuộc sống của nhà phát triển của bạn bằng cách cải thiện các nguyên tắc cơ bản như hiệu suất, chức năng và khả năng sử dụng. Chúng tôi hy vọng những tính năng và bổ sung mới này tiếp tục làm hài lòng việc sử dụng của bạn. nền tảng NET

nhanh hơn bao nhiêu. MẠNG 7?

Hiệu suất phản chiếu — Nhanh hơn 75% . Bắt đầu với những cải tiến về hiệu suất của phiên bản mới. NET 7, trước tiên chúng tôi có sự cải tiến của Hệ thống.

Dotnet 7 có được phát hành không?

Không chỉ là. NET 7 tuyệt vời để xây dựng các ứng dụng gốc trên đám mây; . Azure's PaaS services like App Service for Windows and Linux, Static Web Apps, Azure Functions, and Azure Container Apps are ready for . NET 7 hôm nay , cho bản phát hành thứ ba liên tiếp, như. MẠNG 5. 0 và 6. 0.

Là. NET 7 đã sẵn sàng chưa?

Hiện đã có trong bản phát hành chính thức ,. NET 7 mang đến các cải tiến về hiệu suất, phiên bản mới của C#, công cụ chứa và đám mây gốc cũng như các cải tiến sâu rộng đối với. NET MAUI và khác. NET thư viện và khuôn khổ.