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

前几天,我偶然听说一些软件公司的 HR 在招聘原则上拒绝任何希望使用.NET 的候选人,原因如下:

当时,我正在我的个人 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 方法。甚至参数都是可选的,但它们的存在是为了通过命令行执行提供对参数的访问。

现在,让我们运行应用程序:

.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 就是是您编译的代码,使用此运行时命令可执行:

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 包一样。

生成的 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();        }    }}

您可以使用与上面相同的命令来运行和构建应用程序:

现在打开你的浏览器,转到 http:// localhost:5000,享受这个简洁的 Hello World, 网页:

本文到此为止,本次实践完全基于 Macbook 电脑,在 Linux 命令行下完成,很酷,不是嘛。

在阅读完之后,我真的希望你对.NET Core 的看法有所改变:微软在多年前对.NetCore 进行开源, .NetCore 不仅仅只支持 Windows、而是可以跨平台和开源,令人兴奋的是是,到 2019 年秋天,.NET Core 3.0 即将问世,作为技术从业人员,这些惊喜的变化你不得不关注。

.NET Core很酷,你不得不知相关推荐

  1. 2019公众号总结之——Top100 技术文章汇总

    大家好,我是张善友.新年伊始,我们在欢送10年代的同时迎来了20年代.在这个崭新的时代,感谢各位朋友一直关注"dotnet跨平台".一晃5年有余,关注公众号的粉丝6万,相对于.NE ...

  2. 万万没想到,一个 MongoDB.Driver 的 bug 导致 .NET5 程序死锁!

    一:背景 1. 讲故事 这个月初,星球里的一位朋友找到我,说他的程序出现了死锁,怀疑是自己的某些写法导致mongodb出现了如此尴尬的情况,截图如下: 说实话,看过这么多dump,还是第一次遇到真实的 ...

  3. 你所不知道的ASP.NET Core MVC/WebApi基础系列(二)

    前言 好久没冒泡了,算起来估计有快半年没更新博客了,估计是我第一次停更如此之久,人总有懒惰的时候,时间越长越懒惰,但是呢,不学又不行,持续的惰性是不行dei,要不然会被时光所抛弃,技术所淘汰,好吧,进 ...

  4. 你可能不知道的.Net Core Configuration

    执行原理 1. 配置读取顺序:与代码先后顺序一致. public Startup(IHostingEnvironment env) { var builder = new ConfigurationB ...

  5. 10 个你可能还不知道的很酷JavaScript特性

    英文 | https://javascript.plainenglish.io/5-cool-javascript-features-you-might-not-know-about-yet-f2fc ...

  6. 酷炫时钟_您不知道的11种酷炫形状

    酷炫时钟 Whether it's in nature, architecture or the products we use, cool shapes are everywhere around ...

  7. Unix / 类 Unix shell 中有哪些很酷很冷门很少用很有用的命令?(转)

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:孙立伟 链接:http://www.zhihu.com/question/20140085/answer/14107336 ...

  8. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

    前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...

  9. 考csp所需算法_CSP vs RxJS:您所不知道的。

    考csp所需算法 by Kevin Ghadyani 通过凯文·加迪亚尼(Kevin Ghadyani) CSP vs RxJS:您所不知道的. (CSP vs RxJS: what you don' ...

最新文章

  1. C++/C++11中头文件functional的使用
  2. web移动端_移动端的轮播
  3. 深度学习之利用TensorFlow实现简单的卷积神经网络(MNIST数据集)
  4. boost::dynamic_bitset模块的测试程序
  5. winform程序最大化时,页面显示不全的问题
  6. Similar Pairs CodeForces - 1360C(图匹配+简单贪心)
  7. 【渝粤教育】广东开放大学 大学英语1 形成性考核 (43)
  8. 大数据教程(1.6):linux网络配置及CRT远程连接
  9. c语言编译如何去掉warning,16种C语言编译警告(Warning)类型的解决方法
  10. python和anaconda区别_Pycharm、Anaconda到底是什么?有什么区别?
  11. linux 病毒 sfewfesfs
  12. vs2005/vs2008 快捷键【转】
  13. java 绘制sin函数图像_第11讲 数学软件Mathematica内置函数的使用规则
  14. linux readelf,Linux readelf命令使用
  15. 毕业设计-分布式爬虫系统(干货)
  16. PS长图快速切片_PS拼图软件
  17. gd32f103 调试 ad7606
  18. uniapp抖音小程序发布激励广告
  19. 手机软件可让全民监控蚊媒病毒
  20. 制作可以用航模遥控器遥控的ESP32小车

热门文章

  1. [转]两个经典的windbg调试案例,值得学习。
  2. 面向过程的ado建造者模式
  3. 利用系统错误日志监控磁盘健康状况
  4. 【emWin】例程六:设置颜色
  5. 分布式云+dubbo+zookeeper+Springmvc整合
  6. nginx file not found 错误处理小记
  7. Windows Server 2008关闭默认windows共享
  8. Win7 Ubuntu13.04互通(win7下用vbox安装Ubuntu)
  9. 送给“苦逼”的IT人系列1:IT人的“钱”景以及收入的两道坎
  10. WebView 访问 url asset sd 网页