• .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了一些代码和测试,这些存储库仍在其上。https://www.weixiu3721.com
      毋庸置疑,我作为一名.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文件包含有关运行时,包,版本和其他项目配置属性的信息。它默认很小。
      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版)的任何环境中部署的应用程序的发行版,只需按如下方式发布应用程序:
      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。
      Nonefalse
      hello-world.dll就是是您编译的代码,使用此运行时命令可执行:
      dotnet hello-world.dllhttps://www.weixiu3721.com
      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-x64dotnet publish-c Release-r linux-x64-o dist/linux-x64Hello 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

  • 相关阅读:
    mysql 45讲 索引的使用 09-11
    mysql 45讲 相关锁的概念 06-08
    mysql 45讲 深入浅出索引04-05
    mysql 45讲 概览 01-03
    AQS源码解析第二回
    面试相关-怎么实现限流功能
    人工智能必备数学基础:线性代数基础(2)
    Elasticsearch问题总结和解决方法
    spring boot中打印所有日志
    Java中Stream流里面的findFirst()和findAny()区别
  • 原文地址:https://www.cnblogs.com/zqw111/p/12936710.html
Copyright © 2020-2023  润新知