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

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
原文出处:https://www.infoq.cn/article/xPTBAR9-oJcVtUjTQ0tKlinux

 

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

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

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

毋庸置疑,我做为一名.NET 开发人员,听到这一点消息,个人心里开始以为不舒服。windows

因此在此,我想作几个 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,动手操做吧:app

个人目标是向您展现如何快速轻松地使用.NET Core 来建立应用程序和网站,就像使用 NodeJS 或 RubyRails 同样 - 让咱们开始吧:

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

 

在 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 即将问世,做为技术从业人员,这些惊喜的变化你不得不关注。