.NET Core 3.0及ASP.NET Core 3.0 前瞻

前几天微软发布了 .NET Core 3.0 Preview 9 ,这是.NET Core 3.0 最后一个预览版。

[翻译] .NET Core 3.0 Preview 9 发布


.NET Core 3.0 正式发布将在.NET Conf 上发布,.NET Conf 时间是9月23日至25日。

Visual Studio 2019 16.3预览版3和Visual Studio for Mac 8.3支持.NET Core 3.0 ,这些版本也同时发布。

从.NET Core 3.0 Preview 7就可用于生产,目前dotnet官网就是使用 https://dotnet.microsoft.com/ Powered by .NET Core 3.0.0-preview9-19423-09。

博客园也在前些天升级为.NET Core 3.0 Preview 8,目前运行算是良好。

下面实际体验.NET Core 3.0 新特性。

.NET Core 3.0

System.Text.Json

示例:

    public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? BirthDay { get; set; }
}
//转成对象
string json = ...
Person person = JsonSerializer.Parse<Person>(json);

//转成json字符串
Person person = ...
string json = JsonSerializer.ToString(person);

.NET Standard 2.1

要以.NET Standard 2.1为目标,必须编辑项目文件并将TargetFramework属性更改为netstandard2.1: .NET Framework不支持.NET Standard 2.1。

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>

</Project>

Microsoft.Data.SqlClient

Microsoft.Data.SqlClient是Microsoft Sql Server的数据提供程序。

它是两个System.Data.SqlClient组件的联合体,独立存在于.NET Framework和.NET Core中。

最新版本安装

Install-Package Microsoft.Data.SqlClient 

https://github.com/dotnet/SqlClient 

发布成单个程序

dotnet publish -r win10-x64 /p:PublishSingleFile=true

Alpine Docker images

.NET Core and ASP.NET Core on ARM64

docker pull mcr.microsoft.com/dotnet/core/runtime:3.0-alpine-arm64v8 

docker pull mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine-arm64v8

dotnet-counters

安装 : dotnet tool install --global dotnet-counters --version 3.0.0-preview8.19412.1

使用示例:

显示所有信息

dotnet-counters monitor --process-id 1902 System.Runtime

显示CPU使用 GC 及异常数

dotnet-counters monitor --process-id 1902 System.Runtime[cpu-usage,gc-heap-size,exception-count]

官方文档:https://github.com/dotnet/diagnostics/blob/master/documentation/dotnet-counters-instructions.md

ReadyToRun

你可以通过将应用程序集编译为ReadyToRun(R2R)格式来缩短.NET Core应用程序的启动时间。R2R是一种提前(AOT)编译的形式。

示例提升:

仅限IL的应用:

启动时间:1.9秒

内存使用量:69.1 MB

应用程序大小:150 MB

使用ReadyToRun图像:

启动时间:1.3秒。

内存使用量:55.7 MB

应用程序大小:156 MB

要启用ReadyToRun编译 需要以下操作:

将PublishReadyToRun属性设置为true。 使用显式发布RuntimeIdentifier。

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
</Project>

dotnet publish -r win-x64 -c Release

ReadyToRun编译器目前不支持交叉定位。需要在给定目标上进行编译。例如,如果想要Windows x64的R2R程序,则需要在该环境中运行publish命令。

IL linker

使用IL linker 可以将程序大小从大约68MB减少到大约28MB

dotnet publish -r win10-x64 -c Release /p:PublishTrimmed=true /p:PublishSingleFile=true


HttpClient支持HTTP/2

使用示例:

var client = new HttpClient() { BaseAddress = new Uri("https://localhost:5001") };
// HTTP/1.1 request
using (var response = await client.GetAsync("/"))
{
Console.WriteLine(response.Content);
}
// HTTP/2 request
using (var request = new HttpRequestMessage(HttpMethod.Get, "/") { Version = new Version(2, 0) })
using (var response = await client.SendAsync(request))
{
Console.WriteLine(response.Content);
}

ASP.NET Core 3.0

前一篇也有介绍ASP.NET Core 3.0预览版体验。

ASP.NET Core 3.0中主要更新还是Blazor和gRPC

Blazor

Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架:

  • 使用 C# 代替 JavaScript 来创建丰富的交互式 UI。

  • 共享使用 .NET 编写的服务器端和客户端应用逻辑。

  • 将 UI 呈现为 HTML 和 CSS,以支持众多浏览器,其中包括移动浏览器。

使用 .NET 进行客户端 Web 开发可提供以下优势:

  • 使用 C# 代替 JavaScript 来编写代码。

  • 利用现有的 .NET 库生态系统。

  • 在服务器和客户端之间共享应用逻辑。

  • 受益于 .NET 的性能、可靠性和安全性。

  • 始终高效支持 Windows、Linux 和 macOS 上的 Visual Studio。

  • 以一组稳定、功能丰富且易用的通用语言、框架和工具为基础来进行生成。

Blazor 应用基于组件 。 Blazor 中的组件是指 UI 元素,例如,页面、对话框或数据输入窗体。

组件类通常以 Razor 标记页(文件扩展名为 .razor )的形式编写。 Blazor 中的组件有时被称为 Razor 组件 。

Razor 标记演示组件:

<div>
<h1>@Title</h1>

@ChildContent

<button @οnclick="OnYes">Yes!</button>
</div>

@code {
[Parameter]
public string Title { get; set; }

[Parameter]
public RenderFragment ChildContent { get; set; }

private void OnYes()
{
Console.WriteLine("Write to the console in C#! 'Yes' button was selected.From LineZero");
}

对话框的正文内容 (ChildContent) 和标题 (Title) 由在其 UI 中使用此组件的组件提供。 OnYes 是由按钮的 onclick 事件触发的 C# 方法。

Blazor 使用 UI 构成的自然 HTML 标记。 HTML 元素指定组件,并且标记的特性将值传递给组件的属性。

在以下示例中,Index 组件中使用上面的 Dialog 组件。

@page "/"

<h1>Hello, world!</h1>

Welcome to your new app.

<Dialog Title="Blazor">
Do you want to <i>learn more</i> about Blazor?
   From LineZero
</Dialog>

更多官方介绍:https://docs.microsoft.com/zh-cn/aspnet/core/blazor/get-started?view=aspnetcore-3.0&tabs=visual-studio

gRPC

gRPC 的主要优点是:

  • 现代高性能轻量级 RPC 框架。

  • 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。

  • 可用于多种语言的工具,以生成强类型服务器和客户端。

  • 支持客户端、服务器和双向流式处理调用。

  • 使用 Protobuf 二进制序列化减少对网络的使用。

这些优点使 gRPC 适用于:

  • 效率至关重要的轻量级微服务。

  • 需要多种语言用于开发的 Polyglot 系统。

  • 需要处理流式处理请求或响应的点对点实时服务。

虽然 C# 实现目前在官方 gRPC 上有介绍,但当前实现依赖于用 C (gRPC C-core) 编写的本机库。 

目前正在基于 Kestrel HTTP 服务器和完全托管的 ASP.NET Core 实现gRPC。

原文链接:https://www.cnblogs.com/linezero/p/netcore3andaspnetcore3.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

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

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

相关文章

有了Unicode为啥还需要UTF-8

有了Unicode为啥还需要UTF-8 要回答这个问题&#xff0c;需要吃透“编码”的概念&#xff0c;刚好看到大神阮一峰写的文章&#xff1a;字符编码笔记&#xff1a;ASCII&#xff0c;Unicode 和 UTF-8 抄录如下&#xff0c;便于查找&#xff1a; 一、ASCII 码 我们知道&#xf…

2019ICPC西安邀请赛 E. Tree(树剖 + 线段树)

Tree 给定一棵树&#xff0c;节点有点权&#xff0c;然后有三种操作&#xff1a; 一、修改1−>s1->s1−>s的路径上的点权与ttt进行按位或。 二、修改1−>s1->s1−>s的路径上的点权与ttt进行按位与。 三、查询1−>s1->s1−>s的路径上的点权异或和…

升职却不加薪,为什么我还觉得老板说的挺有道理

前几天晚上&#xff0c;DevOps交流群里&#xff0c;有人抛出这样一个观点&#xff1a;如果有人来找我加薪&#xff0c;我一定告诉他我要给他升职&#xff0c;因为升职是免费的&#xff0c;加薪可是真的要花钱。但是我也会许诺他&#xff0c;如果他能把那个团队搞好&#xff0c;…

GBK、GB2312、GB18030

GBK、GB2312都是编码方式&#xff0c;都是双字节字符集&#xff0c;GB18030编码是一二四字节变长编码 GB&#xff1a;国标&#xff0c;国家标准 BIG5&#xff1a; 支持繁体中文 GB2312&#xff1a; 支持简体中文&#xff08;GBK的子集&#xff09; 共收录 6763 个汉字 GBK&…

2019 ICPC 南京 F. Paper Grading(字典树dfs序上树套树)

Paper Grading 题意&#xff1a;给定nnn个字符串&#xff0c;有两种操作&#xff1a; 一、给定i,ji, ji,j&#xff0c;交换第iii个跟第jjj个字符串。 二、给定 str &#xff0c;k,l,rk, l, rk,l,r&#xff0c;问你在区间[l,r][l, r][l,r]中的字符&#xff0c;与 str 至少有k…

细节之中自有天地,整洁成就卓越代码

溪源 | 长沙.NET技术社区开篇我们总是很容易就能写出满足某个特定功能的代码&#xff0c;却很难写出优雅代码。又最欣赏那些优雅的代码&#xff0c;因为优雅代码更能体现一个开发者的积累。就像写一篇散文&#xff0c;有的就像初学者不得其门而入&#xff0c;遣词造句都非常困难…

#2693. jzptab

jzptab ∑i1n∑j1mlcm(i,j)∑i1n∑j1mijgcd⁡(i,j)∑d1nd∑i1nd∑j1mdij[gcd⁡(i,j)1]∑d1nd∑k1ndk2μ(k)∑i1nkdi∑j1mkdjTkd,f(n)∑i1ni∑T1nf(nT)f(mT)(T∑k∣Tμ(k)k)设g(n)n∑d∣nμ(d)d先令g(n)g(n)ng(1)1,g(p)μ(1)μ(p)p1−p,g(pk,k≥2)1−p同时是积性函数&#xff0c…

UTF8、UTF16、UTF32区别

UTF8、UTF16、UTF32都是unicode字符集的字符编码。 UTF意思是unicode转换格式&#xff08;Unicode transform format&#xff09;&#xff0c;出现UTF8、UTF16、UTF32是出于要在内存中存储字符的目的而对unicode字符编号进行编码。 UTF8、UTF16、UTF32区别&#xff1a;&#…

URL编解码、Big Endian和Little Endian

一、Endian的起源 在各种计算机体系结构中&#xff0c;对于字节、字等的存储机制有所不同&#xff0c;因而引发了计算机通信领域中一个很重要的问题&#xff0c;即通信双方交流的信息单元&#xff08;比特、字节、字、双字等等&#xff09;应该以什么样的顺序进行传送。如果不达…

一次业务网关用ASP.NET Core 2.1重构的小结

前言对于API网关&#xff0c;业界貌似对它进行下划分&#xff0c;有下面几个分类/场景。面向Web App面向Mobile App面向Partner OpenAPI面向Partner ExternalAPI其他。。。在18年8月份的时候&#xff0c;有幸用.NET Core 2.1重构了一个对外的业务网关项目&#xff0c;这个项目的…

导数卷积 (NTT)

导数卷积 有f(x)∑i0n−1aixi求g(x)∑i0n−1f(i)(x)f(n−i−1)(x)∑i0n−1∑j0n−1aij(ij)!j!∑k0n−1ak(n−i−1)(k(n−i−1))!k!设F(n)ann!我们单独求解g(x)的第m项&#xff0c;有gm∑i0n−1∑j1d(F(ij)∗F(n−i−1d−j))(1j!∗1(d−j)!)设H(n)1n!有f(x) \sum_{i 0} ^{n - …

Java如何解决乱码问题

java在字符串中统一用Unicode表示。 对于任意一个字符串&#xff1a;String string “测试字符串”; 如果源文件是GBK编码&#xff0c;操作系统默认环境编码也为GBK&#xff0c;那么编译的时候&#xff0c;JVM将按照GBK编码将字节数组解析为字符&#xff0c;然后将字符转换为…

推荐几个华为,字节跳动、蚂蚁金服等大佬的公众号

每一个公众号都是一个特色的图书馆&#xff0c;为我们的学习提供优质的服务&#xff0c;珍贵的资源&#xff0c;耐心看完&#xff0c;认真选择适合自己的良师益友吧。Python爱好者社区Python爱好者社区&#xff0c;这里有分类整理好的历史优秀文章数千篇供你学习&#xff0c;内…

HDU 6061 RXD and functions(NTT)

RXD and functions 首先是有一个结论&#xff0c;对多项式做任意多次 transformation &#xff0c;其结果跟做一次 transformation Tr(f,∑i1mai)Tr(f, \sum\limits_{i 1} ^{m} a_i)Tr(f,i1∑m​ai​)的结果是一样的&#xff0c;所以我们约定a−∑i1maia -\sum\limits_{i 1…

Java语法糖

Java中语法糖原理、解语法糖 语法糖&#xff1a;switch 支持 String 与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、 断言、数值字面量、for-each、try-with-resource、Lambda表达式、 先Mark&#xff0c;需要后续补齐、 参考&#xff1a; https://w…

使用Ingress来负载分发微服务

目录 使用Ingress来负载分发微服务 Demo规划 准备Demo并完成部署 创建部署&#xff08;Deployment&#xff09;资源 创建服务&#xff08;Service&#xff09;资源 创建Ingress资源并配置转发规则 使用Ingress来负载分发微服务NodePort Service存在太多缺陷&#xff0c;不适合…

伯努利数(详解 + 例题 :P3711 仓鼠的数学题)

伯努利数 定义Sk(n)∑i0n−1ikS_k(n) \sum\limits_{i 0} ^{n - 1} i ^ kSk​(n)i0∑n−1​ik。 从二项式出发 (01)k1∑i0kCk1i0i0k1⋮(n−11)k1∑i0kCk1i(n−1)i(n−1)k1把次方k1的移项&#xff0c;再整体相加&#xff0c;得nk1∑i0kCk1iSi(n)nk1∑i0k−1Ck1iSi(n)(k1)Sk(n…

并发和并行及多线程基本概念

并发&#xff08;Concurrent&#xff09; 在操作系统中&#xff0c;是指一个时间段中有几个程序都处于已启动运行到运行完毕之间&#xff0c;且这几个程序都是在同一个处理机上运行&#xff0c;但任一个时刻点上只有一个程序在处理机上运行。 并发&#xff0c;本质上是一个物理…

XUnit 依赖注入

XUnit 依赖注入Intro现在的开发中越来越看重依赖注入的思想&#xff0c;微软的 Asp.Net Core 框架更是天然集成了依赖注入&#xff0c;那么在单元测试中如何使用依赖注入呢&#xff1f;本文主要介绍如何通过 XUnit 来实现依赖注入&#xff0c; XUnit 主要借助 SharedContext 来…

P3711 仓鼠的数学题(伯努利数)

P3711 仓鼠的数学题 有关伯努利数的知识可以看我的上一篇题解链接&#xff08;写的超详细&#xff09;。 F(x)∑k0nSk(x)ak原本定义的Sk(x)∑i0xik根据伯努利数的定义Sk′(x)∑i0x−1ik则我们求F(x)∑k0nSk′(x)ak,答案即为F(x1)考虑先求F(x)∑k0nak1k1∑i0kCk1iBixk−i1∑k0n…