写点什么

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

  • 2019-08-17
  • 本文字数:2968 字

    阅读完需:约 10 分钟

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

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



前几天,我偶然听说一些软件公司的 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.debsudo dpkg -i packages-microsoft-prod.debsudo apt-get install apt-transport-httpssudo apt-get updatesudo apt-get install dotnet-sdk-2.2
复制代码


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


dotnet --version> 2.2.300
复制代码


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

Hello World!

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


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


mkdir hello-worldcd hello-worlddotnet 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-x64dotnet publish -c Release -r osx-x64 -o dist/osx-x64dotnet 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很酷,你不得不知!


2019-08-17 08:0014615
用户头像
王文刚 Instagram 营销专家

发布了 37 篇内容, 共 24.4 次阅读, 收获喜欢 55 次。

关注

评论

发布
暂无评论
发现更多内容

LabVIEW控制Arduino实现红外测距(进阶篇—6)

不脱发的程序猿

单片机 LabVIEW VISA Arduino Uno 红外测距

BaseDexClassLoader那些事

北洋

6月月更

思科私有动态路由协议:EIGRP

wljslmz

动态路由 6月月更 路由协议 EIGRP

在M1上体验三星T7移动硬盘的性能

IT蜗壳-Tango

IT蜗壳教学 6月月更

模块八-设计消息队列存储消息数据的 MySQL 表格

凯博无线

vue自定义指令

小恺

6月月更

flutter系列之:flutter中常用的container layout详解

程序那些事

flutter 程序那些事 6月月更

【Python技能树共建】lxml 模块

梦想橡皮擦

Python 6月月更

【愚公系列】2022年06月 面向对象设计原则(六)-合成复用原则

愚公搬代码

6月月更

使用 select 切换协程

宇宙之一粟

golang 6月月更

Flutter doctor 显示xcode没有安装的解决办法

坚果

6月月更

数据库每日一题---第9天:销售员

知心宝贝

数据库 算法 前端 后端 6月月更

leetcode 257. Binary Tree Paths 二叉树的所有路径(简单)

okokabcd

LeetCode 搜索 数据结构与算法

预解析与作用域

Jason199

js 全局作用域 作用域 6月月更

为什么需要微服务

阿泽🧸

微服务 6月月更

【Spring 学习笔记(十)】Spring 使用注解整合 Mybatis

倔强的牛角

Java spring Java EE 6月月更

一文读懂Logstash原理

恒山其若陋兮

6月月更

『Three.js』辅助坐标轴

德育处主任

canvas three.js 6月月更

LabVIEW Arduino电子称重系统(项目篇—1)

不脱发的程序猿

单片机 LabVIEW VISA ​Arduino Uno 电子称重系统

动态规划之0-1背包问题(详解+分析+原码)

未见花闻

6月月更

ConcurrentHashMap 源码分析-put方法

zarmnosaj

6月月更

云原生时代微服务架构设计实践

Damon

6月月更

volatile的解构

卢卡多多

volatile 6月月更

直播预告|FeatureStore Meetup V3 重磅来袭!

星策开源社区

机器学习 开源 DevOps 特征平台 MLOps

RF中使用reuqests的两种方式

红毛丹

Python 6月月更

LabVIEW控制Arduino实现超声波测距(进阶篇—5)

不脱发的程序猿

单片机 LabVIEW Arduino VISA 超声波测距

消息队列入门MQ

卢卡多多

MQ 消息队列 6月月更

设计消息队列存储消息数据的 MySQL 表格

小虾米

「架构实战营」

向线程池提交任务

急需上岸的小谢

6月月更

消息队列存储消息数据的 MySQL表

Dean.Zhang

统一认证中心 Oauth2 高可用坑

Damon

微服务架构 安全架构 6月月更

.NET Core很酷,你不得不知!_语言 & 开发_Jeremy Buisson_InfoQ精选文章