写点什么

.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:0014758
用户头像
王文刚 Instagram 营销专家

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

关注

评论

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

实践案例丨基于Raft协议的分布式数据库系统应用

华为云开发者联盟

raft 华为云

docker 安装consul

云辰

USDT承兑商支付系统搭建,区块链支付平台开发

碰撞率下降75%!Mobileye与所托瑞安宣布双方合作重大进展

最新动态

东方证券企业架构之技术架构转型实践

BoCloud博云

云计算 容器 微服务 PaaS 博云

什么是云服务器,ECS它能干什么?

德胜网络-阳

同城双活与异地多活架构分析

vivo互联网技术

架构 高可用 架构设计 高可用系统的架构

将DevOps视为哲学——实施DevOps的绝佳方式

禅道项目管理

DevOps 测试 开发 持续交付

创建spring boot starter

曾彪彪

Java spring Boot Starter

不想码代码,你还能做什么?(一)

研发管理Jojo

项目管理 技术管理 PMO

记一次node项目重构改进

华为云开发者联盟

Java 项目 方案

大项目写代码写到晕头转向?敏捷多项目框架解君愁

Learun

敏捷开发 软件开发

从linux源码看epoll

无毁的湖光

Linux TCP Linux Kenel

Docker映射详解,没问题了!

程序员的时光

Docker

基于electron桌面级脚手架的设计

久违

设计 大前端 全栈

中途转行学Java,如何赛过科班生?你只需要做到这几点

小Q

Java 程序员 架构 技术 基础

案例解析丨Spark Hive自定义函数应用

华为云开发者联盟

spark UDF

Python中的with是测试常用到的资源打开利器

陈磊@Criss

图计算黑科技:打开中文词嵌入训练实践新模式

腾讯云大数据

大数据

看动画学算法之:排序-快速排序

程序那些事

排序 快速排序 数据结构和算法 看动画学算法

使用Valgrind调试Linux C++程序

Simon

c++ gdb Valgrind memcheck 内存泄漏

5分钟带你掌握Makefile分析

华为云开发者联盟

makefile 脚本

程序员快乐器之JAVA代码生成工具

Philips

敏捷开发 程序设计 软件架构 开发工具

TNFE-Weekly[第七十二周已更新]

莹姐🙈

小程序 大前端 周刊

java中实现List集合中对象元素按其属性的中文拼音排序

云辰

想学习数据结构和算法,推荐给你 10 本优质书单

沉默王二

数据结构 算法 书单推荐

区块链永续合约交易所搭建,永续合约系统开发

LeetCode题解:1. 两数之和,Map+队列+双指针,JavaScript,详细注释

Lee Chen

大前端 LeetCode

中国云计算的云栖“坐标”

脑极体

一定要写点什么?!

【写作群星榜】9.1~9.13写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 文章

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