首页 学海无涯 .NET Core .NET Core 3.0正式版发布
.NET Core 3.0正式版发布
摘要 今天凌晨微软在.NET Conf上正式发布了.NET Core 3.0,2018年12月4日,微软推出首个预览版.NET Core 3.0 Preview1,时至今日,.NET Core 3.0正式版终于发布!

以下内容摘自.NET官方博客:Announcing .NET Core 3.0

.NET Core 3.0发布

.NET Core 3.0的改进包括:添加对WinForm、WPF的支持,添加新的JSON API,对ARM64的支持以及全面提高的性能。

同时发布的还有C# 8.0、ASP.NET Core 3.0、EF Core 3.0、Visual Studio 2019 16.3、Visual Studio 2019 for mac 8.3。

.NET Core 3.0是Visual Studio 2019 16.3的一部分,只需升级到Visual Studio 2019 16.3就可以获取.NET Core 3.0。

.Net Core 3.0下载

关于.NET Core 3.0

以下几点是.NET Core 3.0关键的改进,需要引起注意:

    ● .NET Core 3.0在dot.net和Bing.com上测验了几个月,已经通过了测试。许多其他Microsoft团队很快将在生产中的.NET Core 3.0上部署大型工作负载。

    ● 许多组件的性能都得到了极大的提高,并在Performance Improvements in .NET Core 3.0进行了详细描述。

    ● C# 8.0增加了异步流(async streams)、范围(Range)和索引(Index)、更多的模式以及可空引用类型(Nullable)。可空引用类型主要针对导致代码缺陷的空指针异常(NullReferenceException)

    ● F# 4.7发布,详情请看:Announcing F# 4.7

    ● .NET Standard 2.1增加了可以在.NET Core和Xamarin代码中都可以使用的类型集,.NET Standard 2.1包含自.NET Core 2.1以来的类型。

    ● .NET Core已添加对Window桌面应用的支持,包括Windows Form和WPF(已开源)。WPF设计器已经是Visual Studio 2019 16.3的一部分,Windows Form设计器仍处于预览版,可从VSIX进行下载

    ● .NET Core 应用现在默认情况下就具有可执行文件。以前的应用需要使用dotnet命令来启动(如dotnet myapp.dll),现在可以使用特定于应用程序的可执行文件来启动应用程序(如myapp或./myapp),具体取决于操作系统。

    ● 新增高性能的JSON API,用于读取器/写入器,对象模型和序列化方案。这些 API 基于Span<T>从头开始构建,使用 UTF8 来替代 UTF16(如 string),由于这些 API 使用了最小化的内存分配,因此带来了更好的性能,减少了垃圾回收器的工作。详情请看The future of JSON in .NET Core 3.0

    ● 默认情况下,垃圾回收使用更少的内存。这种改进对于许多应用程序托管在同一服务器上的场景非常有益。垃圾收集器(GC)也进行了更新,以更好地利用大于64核的机器上的大量核心。

    ● .NET Core已针对Docker进行了强化,以使.NET应用程序在容器中可预测且有效地工作。已将容器配置为有限的内存或CPU时,垃圾收集器和线程池已更新为更好地工作。.NET Core的Docker镜像体积较小,尤其是SDK镜像。

    ● 现在支持Raspberry Pi和ARM芯片以支持IoT开发,包括使用远程Visual Studio调试器。可以使用新的GPIO API部署可监听传感器的应用程序,并在显示器上打印消息或图像。ASP.NET可用于将数据公开为API或允许配置IoT设备的站点。

    ● .NET Core 3.0 会被 11 月发布的 .NET Core 3.1 取代,因为后者才是 LTS 版本(至少会获得三年的技术支持),不过官方还是建议大家先升级到 .NET Core 3.0,然后再升级到 3.1,这样过渡起来更方便。

    ● .NET Core 2.2将于12/23停止服务。请参阅.NET Core支持策略

    ● 对于要使用.NET Core 3.0的Windows上的Visual Studio用户,Visual Studio 2019 16.3是必需的更新。

    ● 对于要使用.NET Core 3.0的Mac用户,Visual Studio for Mac 8.3是必需的更新。

平台支持

以下操作系统支持.NET Core 3.0: 

 Alpine: 3.9+ 

 Debian: 9+ 

 openSUSE: 42.3+ 

 Fedora: 26+ 

 Ubuntu: 16.04+ 

 RHEL: 6+ 

 SLES: 12+ 

 macOS: 10.13+ 

 Windows Client: 7, 8.1, 10 (1607+) 

 Windows Server: 2012 R2 SP1+ 

 注意:Windows窗体和WPF应用程序仅在Windows上运行。 

 Chip support follows: 

 Windows,macOS和Linux上的x64 

 Windows上的x86 

 Windows和Linux上的ARM32 

 Linux上的ARM64(内核4.14+) 

注意:请确保.NET Core 3.0 ARM64部署使用Linux内核4.14版本或更高版本。例如,Ubuntu 18.04满足此要求,但16.04不满足。

.NET Core 3.0 部分亮点

1.WPF和Windows Form

现在,可以在Windows上使用.NET Core 3.0构建WPF和Windows Forms应用程序。Visual Studio 2019 16.3支持创建面向.NET Core的WPF应用程序。这包括新模板以及更新后的XAML设计器和XAML Hot Reload。

下图显示了在新设计器中显示的WPF应用程序:

Windows Forms设计器仍处于预览状态,可以单独下载获得

2.可空引用类型

C# 8.0引入了可为空的引用类型。

3.接口成员的默认实现

C# 8.0可以为接口成员提供默认实现。如果实现该接口的类没有实现该成员,那么将调用改成员的默认实现。

interface ILogger
{
    void Log(LogLevel level, string message);
    void Log(Exception ex) => Log(LogLevel.Error, ex.ToString()); // 新的重载
}
class ConsoleLogger : ILogger
{
    public void Log(LogLevel level, string message) { ... }
    // Log(Exception) 使用默认实现
}

在此示例中,ConsoleLogger类不必实现ILogger接口成员的重载Log(Exception)方法,因为它是使用默认实现声明的。现在,只要为现有实现者提供默认实现,就可以将其添加到现有的公共接口中。

4.异步流

C# 8.0中,foreach可以用来处理异步数据流IAsyncEnumerable<T>。使用await foreach来处理异步流中的元素,而yield return一个元素来生成异步流。

以下示例演示了异步流的产生和使用:

async IAsyncEnumerable<int> GetBigResultsAsync()
{
    await foreach (var result in GetResultsAsync())
    {
        if (result > 20) yield return result;
    }
}

foreach语句是异步的,它内部使用yield return来为调用者生成异步流。yield return也是推荐用来生成异步流的模式。

5.索引和范围

C# 8.0创建了新的语法和类型,用于描述索引器、数组元素访问或其他公开数据的访问,这包括单个值(索引)和多个值(范围)。

Index是描述数组索引的新类型。你可以通过一个从开始算起的int或一个使用^前缀从结尾算起的int来创建一个Index。如下所示:

Index i1 = 3;  // number 3 from beginning
Index i2 = ^4; // number 4 from end
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"{a[i1]}, {a[i2]}"); // "3, 6"

注意:^4是从结尾下标1开始算,而3是从开始下标0开始算。

Range相似,由两个Index组成,一个值用于开始,一个值用于结尾,并可以使x..y的范围表达式编写,如:

Range range = i1..i2;
var slice = a[range]; // { 3, 4, 5 }

注意:范围是一个前闭后开的区间。

6.using声明

C# 8.0新增语法,是前面带using关键字的变量声明,它指示编译器声明的变量应在封闭范围的末尾进行处理。如下所示:

static void Main()
{
    var filename = "Program.cs";
    var line = string.Empty;
    var magicString = "magicString";

    var file = new FileInfo(filename);
    using var reader = file.OpenText(); //using声明
    while ((line = reader.ReadLine()) != null)
    {
        if (line.Contains(magicString))
        {
            WriteLine("Found string");
            return;
        }
    }

    WriteLine("String not found");
}   // reader变量已在此处释放

7.Switch表达式

C# 8.0新增语法,简单来说就是switch语句简化为表达式。请看示例:

//Swicth语句
string OldSwitch(string word)
{
    switch (word)
    {
        case ".NET":
            return "Core";
        case "Core":
            return ".Net";
        default:
            return "No";
    };
}
//Switch表达式
string NewSwitch(string word) => word switch
{
    ".NET" => "Core",
    "Core" => ".Net",
    _ => "No"
};

总结:

    1.变量位于switch前。

    2.选项由case v : return r;变为 v => r,。

    3.default变为_弃元。

    4.语句变表达式。

8.引入高性能的JSON API

新版JSON序列化使用的是System.Text.Json.JsonSerializer:

string json = ...;
Person person = JsonSerializer.Parse<Person>(json);

Person person = ...;
string json = JsonSerializer.Serialize(person);


版权声明:本文由不落阁原创出品,转载请注明出处!

本文链接:http://www.leo96.com/article/detail/45

来说两句吧

该文章已禁止评论

最新评论

暂无评论,大侠不妨来一发?