NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级

阿里云瑶池数据库

数据库 云计算 阿里云 云原生 polarDB

语音数据集:智能驾驶中车内语音识别技术的基石

来自四九城儿

【Swift专题】聊聊Swift中的属性

珲少

mac电脑数据库管理工具:DBeaverEE v23.3.1企业激活版

iMac小白

年货零食大单来袭,极兔速递如何精准破解旺季物流难题?

新消费日报

服装企业的配补调系统:从传统到智能的转型

第七在线

WMS系统与电商平台快速拉通库存数量

RestCloud

自动化 零代码 wms APPlink

基于volcano实现节点真实负载感知调度

快乐非自愿限量之名

架构 Volcano 负载测试

c4d r21中文破解版下载 C4D三维动画设计制作软件

南屿

京东广告算法架构体系建设--高性能计算方案最佳实践 | 京东零售广告技术团队

京东科技开发者

金蝶云星辰与交通银行的完美结合:引领企业迈向高效支付管理新时代!

聚道云软件连接器

案例分享

EMQ 和 Intel 评选工业物联网领域最佳案例与应用

新消费日报

语音数据集在智能驾驶中的关键作用与应用

来自四九城儿

JDK17 Groovy Caffeine 模块化报错分享

FunTester

【京东云新品发布月刊】2024年1月产品动态

京东科技开发者

【技术探讨】一种多节点5Km(1.2M bps速率)实时Sub-G无线通信的物联网通讯解决方案

Geek_ab1536

SD-WAN和专线混合组网:企业出海网络解决方案

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

语音数据集在智能驾驶中的价值与应用

来自四九城儿

NFT Dapp的兴起:关于创建NFT Dapp需要了解什么

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Apple 发布 iMovie、Final Cut Pro、Compressor、Motion 的更新

南屿

业界声音|PolarDB最值得关注的技术创新有哪些?

阿里云瑶池数据库

数据库 云计算 阿里云 云原生 polarDB

SD-WAN技术:网络升级的智慧选择

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

软件测试学习笔记丨自动化关键数据记录

测试人

软件测试 测试开发

TuGraph Analytics图数据集成:表到图的最后一公里

TuGraphAnalytics

数据仓库 数据集成 tugraph 图数据集成 图表转换

【体验有奖】5 分钟函数计算部署 AI 艺术字应用,晒姓氏头像赢 Cherry 键盘!

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

选300平米别墅还是90平米小平层?一文带你读懂PolarDB分布式版集分一体化

阿里云瑶池数据库

数据库 云计算 阿里云 polarDB

质量保障工作的核心Roadmap

老张

软件测试 质量保障

雷霆游戏加入鸿蒙“朋友圈”,《问道》手游启动鸿蒙原生应用开发

最新动态

评估SD-WAN的三个功能

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

分库分表已成为过去式,使用分布式数据库才是未来

不在线第一只蜗牛

数据库 源码 分布式 TiDB

EMQ 和 Intel 评选工业物联网领域最佳案例与应用

新消费日报

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