阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

开源一夏|聆听信通院何所长开源生态发展的所记所思

穿过生命散发芬芳

开源 8月月更 SUSECON

Java基础知识(一些需要注意的点)

自然

基础 8月月更

干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(下)

Orillusion

WebGL 元宇宙 Metaverse webgpu #开源

[极致用户体验] 用户体验好的 Button,在手机上不应该有 Hover 态

HullQin

CSS JavaScript html 前端 8月月更

面试突击75:SpringBoot 有几种读取配置文件的方法?

王磊

Java 常见面试题

再见MybatisPlus,阿里推出新ORM框架!

TimeFriends

8月月更

Redis分布式锁-觉悟吧,红锁!

知识浅谈

redis分布式锁 8月月更

a豆14 Pro高性能高颜笔记本,新潮配色助力打造a豆AIoT智能生态圈

科技热闻

文件管理-Linux系统VIM编辑

Albert Edison

Linux centos 运维 vim教程 8月月更

C++继承中的同名成员处理方式与同名静态成员处理方式

CtrlX

c c++ 面向对象 代码 8月月更

彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

刘悦的技术博客

Go golang Go web Go 语言 golang 面试

leetcode 128. Longest Consecutive Sequence 最长连续序列(中等)

okokabcd

LeetCode 数据结构与算法

一文读懂Web3 结算协议 Zebec Protocol 的商业模式与发展前景

EOSdreamer111

STM32入门开发:编写XPT2046电阻触摸屏驱动(模拟SPI)

DS小龙哥

8月月更

【Java】:你知道字符串的格式化输出吗?

翼同学

Java 前端 编程语言 8月月更

春意盎然,适合“二叉树剪枝”

掘金安东尼

算法 前端 8月月更

Java基础之Java枚举

自然

Java core 8月月更

不是吧,还有人不知道三目运算符的BUG

自然

基础 8月日更 8月月更

小菜鸟河北联通上岗培训随笔二

乌龟哥哥

8月月更

docker下,极速搭建spark集群(含hdfs集群)

程序员欣宸

spark 8月月更

开源一夏 | 使用 Three.js 实现"雪糕"地球,让地球也凉爽一夏

战场小包

JavaScript 开源 前端 3D ThreeJS

Web3 结算协议 Zebec Protocol 的商业模式与发展前景一览

BlockChain先知

RocketMQ高可用设计之消息发送重试

急需上岸的小谢

8月月更

【云原生】SpringCloud Alibaba 之 Nacos注册中心实战

Bug终结者

Java 分布式 SpringCloud 8月月更

【数独 1】不回溯,试试候选数法1ms高效解数独谜题-C++实现

清风莫追

8月月更

Web3 结算协议 Zebec Protocol 的商业模式与发展前景一览

股市老人

加码企业服务,阿里云发布计算巢加速器

阿里云弹性计算

PaaS 企业服务 计算巢 ISV

App切换到后台后如何保持持续定位?

HMS Core

RPC与REST对比指南

阿泽🧸

Rest 8月月更

每日一R「08」类型系统(二)

Samson

8月月更 ​Rust

Web3 结算协议 Zebec Protocol 的商业模式与发展前景一览

鳄鱼视界

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