写点什么

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

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

关注

评论

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

快递鸟快递查询API接口参数代码

快递鸟

快递

CDN海外加速对国际服务器的效果如何?

Ogcloud

CDN 网络加速 CDN加速 海外网络加速 CDN网络加速

区块链智能合约开发:全面解析与实践指南

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

双十一首款柔性算力云服务器亮相全新亮相!华为云Fleus X 实例到底有多强?

YG科技

双十一轻松跨越数字鸿沟!华为云Flexus X实例引领中小企业低成本上云

YG科技

大模型推荐系统如何高效预训练和推理

博文视点Broadview

远程踏勘系统(源码+文档+部署+讲解)

深圳亥时科技

ppt结尾页怎么设计?推荐12个高颜值ppt结束页模板!

职场工具箱

效率工具 职场 PPT 办公软件 AI生成PPT

BSC链近况及解读:BSC链代币DApp开发详解

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 交易所开发代币开发

一夜之间,内容行业和大模型行业被这个All in One产品改变了

脑极体

AI

在华为开发者空间,简单几步带你实现AI风格化编程

华为云开发者联盟

云主机 华为云ModelArts FunctionGraph AI 大底座

技术干货丨Inspire Cast 如何避免自动网格划分失败?

Altair RapidMiner

人工智能 仿真 智能制造 altair Inspire

深入了解测试开发与DevOps体系

测试人

软件测试

打造透明、高效的分布式系统:通过 EMQX ECP 集成实现链路追踪功能

EMQ映云科技

链路追踪 emqx EMQX ECP 边缘服务

科技赋能绿色“碳”索,下党零碳示范基地启幕

新消费日报

微短剧出海大升级:窄带高清降本,极致播放体验,海外合规更安心

阿里云CloudImagine

人工智能 AIGC 窄带高清 视频翻译 短剧出海

Python中哪个框架最适合做API?

科普小能手

API Python框架 Python开发 pyton API 接口

5分钟搞懂 Golang 堆内存

俞凡

golang

双十一降本增效新路径!华为云Flexus X实例为中小企业注入“硬核”动力

YG科技

权限系统:权限应用服务设计

不在线第一只蜗牛

架构 应用开发

Java灵魂拷问13个为什么,你都会哪些?

不在线第一只蜗牛

Java Python

课程质量评估系统(源码+文档+部署+讲解)

深圳亥时科技

无代码技术怎么兴起的?它对企业数字化转型有什么用处?

积木链小链

技术分享 无代码 无代码平台

论云游戏的性能与性价比,ToDesk、青椒云、顺网云游戏等具体实操看这篇就够了

小喵子

云桌面 云电脑 云游戏 ToDesk

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