我一直回想我的第一篇博文,那是关于多个服务的服务器平台的详细教程,它使用 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 updatesudoapt-getinstalldotnet-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 文件包含有关运行时,包,版本和其他项目配置属性的信息。它默认很小。
exe netcoreapp2.2
最后,我们最重要的文件:program.cs。
using system; namespace helloworld{ class program { static void main(string[] args) { console.writeline(hello world!); } }}
在这里,没有什么是棘手的 - 你有你的默认命名空间。通过静态方法 main()声明主入口点的类。类或命名空间可以更改为您想要的任何内容,也不需要公开,main 方法也不需要。这里的类是内部的,方法是私有的。
唯一的限制是至少要有这个静态 main 方法。甚至参数都是可选的,但它们的存在是为了通过命令行执行提供对参数的访问。
现在,让我们运行应用程序:
dotnet run> hello world!
要获得可在具有.net core 运行时(此处为 2.2 版)的任何环境中部署的应用程序的发行版,只需按如下方式发布应用程序:
dotnetpublish-crelease-odist
生成的 dist 文件夹应如下所示:
dist├── hello-world.deps.json├── hello-world.dll├── hello-world.pdb├──hello-world.runtimeconfig.json
可以删除 hello-world.pdb,因为它仅用于调试目的,但默认情况下会生成 pdb,即使在发布模式下也是如此。您可以通过将此代码段添加到 hello-world.csproj(在标记下)来禁用此自动生成 pdb。
nonefalse
hello-world.dll 就是是您编译的代码,使用此运行时命令可执行:
dotnethello-world.dll
dlldeps.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-x64dotnetpublish-crelease-rlinux-x64-odist/linux-x64hello web !
好吧,这很酷,我们很容易在控制台上写了一行,但是有些网络 web 呢?好吧,这也很容易做到!
首先,让我们添加 asp.net core 的包:
dotnetaddpackagemicrosoft.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 即将问世,作为技术从业人员,这些惊喜的变化你不得不关注。
区块链或将使互联网变得极端透明
pcb超薄变压器的优势和劣势
利用低门限电压延长电池寿命技术
英飞凌:持续加码汽车电子,致力实现零排放
航天器雷达简介
.NET Core 平台是什么?
小米6什么时候上市?小米6最新消息:小米6将会在后天预热,渲染图曝光
自制智能小车控制电路设计方案
基于区块链技术打造的无人零售底层操作系统RETA介绍
全球缺芯,谁将是最大玩家?
苹果或与特斯拉展开深度合作?
小米10 Pro开发版内测现已支持跨屏协作
蓝膜在封装切割过程中的常见异常及处理办法
智能服务机器人在各个领域中的应用情况分析
贴片电容的特点
v锥流量计原理图_v锥流量计计算公式
关于土壤养分速测仪的操作方法介绍
FORGE抽屉式连接器:面向电源系统和电气硬件设计人员专门定制
微雪电子RK3308主板CC上手介绍
西班牙将成为LG化学在欧洲的第二大电池工厂