.NET Core 很酷,你不得不知!

我一直回想我的第一篇博文,那是关于多个服务的服务器平台的详细教程,它使用 GitLab CI 在 AWS 上,当时使用单个命令行进行部署, 至今回想,令人感觉很酷。

image .NET Core 很酷,你不得不知! .NET Core 很酷,你不得不知! 1240

前几天,我偶然听说一些软件公司的 HR 在招聘原则上拒绝任何希望使用.NET 的候选人,原因如下:
.NET 是一个古老的封闭式生态系统,与其他更性感的开发平台截然不同,如 NodeJS 或 RubyRails,这些开发平台更加灵活和开放。.NET 实际上有点像 Java,但是,JAVA 拥有强大的开源生态圈、而且可以跨平台,关键的是 Java 不被邪恶的微软一家垄断。

当时,我正在我的个人 MacBook 上使用 C#和.NET Core 开发 Web 应用程序,我使用 Lambdas 函数,Linux EC2 和 Docker 容器在 AWS 上使用 GitLab 进行部署。我甚至 5 年前曾经在.NET Core 的官方开源 Github 存储库中 Pull 了一些代码和测试,这些存储库仍在其上。

毋庸置疑,我作为一名.NET 开发人员,听到这一点消息,我的内心开始觉得不舒服。

所以在此,我想做几个 demo,来告诉大家可以在 C#和.NET Core 中轻松快速地开发、部署,就像我们在 JavaScript 和 NodeJS 中所做的那样: 跨平台、开源、一个命令行搞定一切。

.NET Core 平台是什么?

当我们谈论.NET Core 平台时,事情很快变得比较复杂,在这里,我只引用官方文档:

  • .NET Core 运行时:类型系统,程序集加载,垃圾收集器,本机互操作和其他基本服务。 .NET Core 框架库提供原始数据类型,应用程序组合类型和基本实用程序。
  • ASP.NET 运行时:提供了一个框架,用于构建基于云的互联网应用程序,例如 Web 应用程序,IoT 应用程序和移动后端。
  • .NET Core CLI: 提供工具和语言编译器(Roslyn 和 F#)支持.NET Core 开发人员体验。
  • dotnet 工具:用于启动.NET Core 应用程序和 CLI 工具。它选择并托管运行时,提供程序集加载策略并启动应用程序和工具。

以上内容总结:

  • 运行时,可以通过执行.NET Core 的二进制文件。
  • ASP.NET Core 是一个框架和一组库,可以用来构建 Web 应用程序和 Web API。
  • .NET Core CLI 与其他平台 CLI 类似,允许创建,构建,发布,设置和支撑项目以及其他操作。

Hello world,动手操作吧:

我的目标是向您展示如何快速轻松地使用.NET Core 来创建应用程序和网站,就像使用 NodeJS 或 RubyRails 一样 – 让我们开始吧:

在 Linux 安装很简单 ; 只需点击此链接并选择您的发布,同时注册 Microsoft 密钥和 feed。
安装必要的软件包需要大约三、四个命令。

在 Linux Ubuntu 上,从终端看起来的样子:

wget -q https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2

安装完成后,通过如下命令进行测试是否成功:

dotnet --version
> 2.2.300

在 MacO 或 Windows 上安装.NET Core 更简单:只需从官方 Microsoft 门户下载安装包,安装程序为您自动完成这些工作,通常只需要几分钟。

Hello World!

在众所周知的程序教程中,首先创建一个控制台应用程序:显示 Hello World!。

通过命令行来创建文件夹,然后通过命令行创建控制台应用程序工程:

mkdir hello-world
cd hello-world
dotnet new console

你将得到如下文件结构:

hello-world
├── bin
├── obj
├── hello-world.csproj
├── Program.cs

您可以忽略 bin 和 obj 文件夹,这些文件夹仅用于构建和调试。 事实上,我在 VSCode 和 Git 上都忽略了它们。

.csproj 文件包含有关运行时,包,版本和其他项目配置属性的信息。 它默认很小。

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

<PropertyGroup>

<OutputType>Exe</OutputType>

<TargetFramework>netcoreapp2.2</TargetFramework>

</PropertyGroup>

</Project>

最后,我们最重要的文件:Program.cs。

using System;
namespace HelloWorld
{
  class Program
  {
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
    }
  }
}

在这里,没有什么是棘手的 – 你有你的默认命名空间。 通过静态方法 Main()声明主入口点的类。 类或命名空间可以更改为您想要的任何内容,也不需要公开,Main 方法也不需要。 这里的类是内部的,方法是私有的。

唯一的限制是至少要有这个静态 Main 方法。 甚至参数都是可选的,但它们的存在是为了通过命令行执行提供对参数的访问。

现在,让我们运行应用程序:

dotnet run
> Hello World!

.NetCore, 就这么简单!

要获得可在具有.NET Core 运行时(此处为 2.2 版)的任何环境中部署的应用程序的发行版,只需按如下方式发布应用程序:

dotnet publish -c Release -o dist

生成的 dist 文件夹应如下所示:

dist
├── hello-world.deps.json
├── hello-world.dll
├── hello-world.pdb
├── hello-world.runtimeconfig.json

可以删除 hello-world.pdb,因为它仅用于调试目的,但默认情况下会生成 pdb,即使在发布模式下也是如此。 您可以通过将此代码段添加到 hello-world.csproj(在标记下)来禁用此自动生成 pdb。

<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugType>None</DebugType>
<DebugSymbols>false</DebugSymbols>

</PropertyGroup>

hello-world.dll 就是是您编译的代码,使用此运行时命令可执行:

dotnet hello-world.dll

deps.json 和 runtimeconfig.json 文件分别用于处理其他包的依赖关系和配置运行时。

最后,您可以使用 dotnet publish 运行时标识符目录轻松地在发布特定平台:

dotnet publish -c Release -r win-x64 -o dist/win-x64
dotnet publish -c Release -r osx-x64 -o dist/osx-x64
dotnet publish -c Release -r linux-x64 -o dist/linux-x64

Hello Web !

好吧,这很酷,我们很容易在控制台上写了一行,但是有些网络 Web 呢? 好吧,这也很容易做到!

首先,让我们添加 ASP.NET Core 的包:

dotnet add package Microsoft.AspNetCore

引用新包就像为 NodeJS 导入 npm 包一样。
这个包将允许我们配置,构建和运行一个简单的 WebHost 程序。 这可以在 Main()方法中的单行代码中完成。

生成的 Program.cs 应如下所示:

using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;


namespace HelloWorld
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Hello World!");


            WebHost.CreateDefaultBuilder()
                .Configure(app => app.Run(context => context.Response.WriteAsync("Hello World!")))
                .Build()
                .Run();
        }
    }
}

您可以使用与上面相同的命令来运行和构建应用程序:

dotnet run

现在打开你的浏览器,转到 http:// localhost:5000,享受这个简洁的 Hello World, 网页:

本文到此为止,本次实践完全基于 Macbook 电脑,在 Linux 命令行下完成,很酷,不是嘛。

在阅读完之后,我真的希望你对.NET Core 的看法有所改变:微软在多年前对.NetCore 进行开源, .NetCore 不仅仅只支持 Windows、而是可以跨平台和开源,令人兴奋的是是,到 2019 年秋天,.NET Core 3.0 即将问世,作为技术从业人员,这些惊喜的变化你不得不关注。

微软.Net Core 3.0 预览版 7 发布:大幅减少 SDK 空间大小

这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话),故可在生产环境进行开发和部署。

据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话),故可在生产环境进行开发和部署。 Windows, macOS 和 Linux 版本的Download .NET Core 3.0 预览版 7 下载地址如下: 与此同时,ASP.NET Core 和EF Core 实体框架 也同于同一天发布。 针对 .NET Core 3.0 预览版 7 的新特性,Visual Studio 用户需要在 Visual Studio 2019 16.3 预览 1 中使用。 Microsoft .NET 站点已更新为.NET Core 3.0 预览版 7(请参阅网站页脚中提示 Powered by .NET Core 3.0.0-preview7-27912-14)。 且该站点已经在预览 7 上正常运行了两周多。 微软声称可能会在几周内将 Microsoft .NET 网站迁移到.NET Core 3.0 预览 8 版本。 另外,开发团队正在努力确保与 .NET Core 1.x 和 2.x 应用程序的高度兼容性,从而可以直接将现有应用程序快速升级到 .NET Core 3.0 版本。

.NET Core SDK 大小精简

使用 .NET Core 3.0 的 .NET Core SDK 要小得多。 主要原因是改变了构建 SDK 的方式改变,转而使用各种特定的“包”(引用程序集,框架,模板)。 在以前的版本(包括 .NET Core 2.2)中,我们使用 NuGet 包构建了 SDK,其中包含许多不需要的引用,导致浪费了大量空间。 您可以在.NET Core 3.0 SDK Size Improvements如何计算这些文件大小。 文章提供了详细说明,以便在自己的环境中运行相同的测试。 .NET Core 3.0 SDK 大小(括号中标注了大小更改)
操作系统 安装包大小 占用磁盘大小
Windows 164MB (-440KB; 0%) 441MB (-968MB; -68.7%)
Linux 115MB (-55MB; -32%) 332MB (-1068MB; -76.2%)
macOS 118MB (-51MB; -30%) 337MB (-1063MB; -75.9%)
Linux 和 macOS 的大小改进是令人惊奇的。 Windows 的改进较小,因为我们已将 WPF 和 Windows Forms 添加作为 .NET Core 3.0 的一部分。 令人惊讶的是,我们在 3.0 中添加了 WPF 和 Windows Forms,并且安装程序仍然(稍微)小一些。 您可以通过.NET Core SDK Docker映像包看到改进也不错(此处仅限于 x64 Debian 和 Alpine)。
发行版 2.2 压缩大小 3.0 压缩大小
Debian 598MB 264MB
Alpine 493MB 148MB
.NET Core 3.0 版本即将完成,故不再构建新功能,因此团队专注于稳定性和可靠性。 请尽快通过 Github 告诉开发团队您发现的任何问题,这样在发布 3.0 版本之前尽可能多地修复问题。