微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的.NET程序员,相信传统的.NET应用的开发方式已经深深地烙印在你的脑子里面。.NET Core带来了全新的开发体验,但开发方式的差异根本不足以成为你快速跨入.NET Core 世界的门槛,因为在.NET Core在很多方面比传统的.NET Framework应用开发要简单。为了消除很多尚未接触过.NET Core的读者对未知世界的恐惧,我们先通过几个简单的Hello World应用让大家感受一下在Windows上的.NET Core全新的开发体验。

一、安装开发环境

.NET Core的官方站点介绍了在各种平台下安装开发环境的方式。总的来说,我们在不同的平台下开发.NET Core应用都需要安装相应的SDK和IDE。成功安装SDK之后,我们在本地将自动拥有.NET Core的运行时(CoreCLR)、基础类库以及相应的开发工具。

dotnet.exe是.NET Core SDK为我们提供的一个重要的命令行工具,我们在进行.NET Core应用的开发部署的时候将会频繁地使用它。dotnet.exe提供了很多有用的命令,为了不“节外生枝”,我们就不对它们作系统介绍了,如果后续章节涉及到相关命令,我们再对它们作针对性的介绍。当.NET Core SDK安装结束之后,我们可以运行dotnet命令来确认SDK是否安装成功。如下图所示,我们执行dotnet --info命令查看当前安装的.NET Core SDK的基本信息,显示的信息包含SDK的版本、运行时环境以及本机按照的所有运行时版本。

二、选择IDE

高效的开发自然离不开一个优秀的IDE,在这方面作为一个.NET开发者是幸福的,因为我们拥有宇宙第一的开发神器Visual Studio。虽然Visual Studio Code也不失为一个优秀的IDE,如果Windows依旧是我们主要的开发环境,我个人还是推荐使用Visual Studio。当我在敲这行文字的时候,Visual Studio的最新版本为2019。顺便说一下,Visual Studio已经提供了Mac版本。

Visual Studio Code是一个完全免费并且提供全平台支持(Windows、Mac和Linux)的IDE,我们可以直接在其官网(https://code.visualstudio.com/)上下载。Visual Studio 2019提供了社区版(Community)、专业版(Professional)和企业版(Enterprise),其中社区版是免费的,专业版和企业版需要付费购买。Visual Studio的官网地址为https://www.visualstudio.com/。

除了Visual Studio和Visual Studio Code,我们还可以使用一款叫做Rider的IDE来开发.NET Core应用。Rider是著名的JetBrains公司开发的一款专门针对.NET的IDE,我们可以利用它来开发ASP.NET、.NET Core、Xmarin以及Unity应用。和Visual Studio Code一样,Rider同样也是个跨平台的IDE,我们可以同时在Windows、Max OS X以及各种桌面版本的Linux Distribution上使用它。不过这不是一款免费的IDE,对它感兴趣的朋友可以在官方站点载30天试用版。

三、项目模板

dotnet .exe提供了基于 “脚手架(Scaffolding)”创建初始应用的new命令。如果需要开发某种类型的.NET Core应用,我们一般不会从第一行代码写起,而是利用这个命令帮助我们创建一个具有初始结构的应用程序。除此之外,在开发过程中如果需要添加某种类型的文件(比如各种类型的配置文件、MVC的视图文件等),我们也可以利用该命令来完成,通过这种方式添加的文件具有预定义的初始内容。.NET Core SDK在安装的时候为我们提供了一系列预定义的脚手架模板,我们可以按照如下图所示的方式执行命令行“dotnet new --list”列出当前安装的脚手架模板。

上图列出的就是NET Core SDK安装后提供的预定义的脚手架模板,这些模板大致分为Project Template和Item Template两类,前者为我们创建一个初始项目,后者则在一个现有项目中针对某种项目元素添加一个或者多个对应的文件。细心的读者可以从图2中看到dotnet new命令具有一个--type参数,该参数具有三个预定义的选项(project、item和other),其中前两个分别对应着Project和Item这两种模板类型。

如果这些预定义的脚手架模板不能满足我们的需求,我们还可以创建自定义的Project或者Item模板,至于自定义模板该如何定义,有兴趣的读者朋友可以参考.NET Core官方文档。自定义模板最终会封装成一个NuGet包,我们可以通过执行dotnet new -i或者dotnet new --install命令对其进行安装。除此之外,对于已经安装的模板,我们可以通过执行dotnet new -u或者dotnet new --uninstall命令将其卸载。

四、创建一个控制台程序

接下来我们利用dotnet new命令(dotnet new console -n helloworld)按照如下图所示的方式创建一个名为“helloworld”的控制台程序。和传统的.NET Framework应用一样,一个针对C#的.NET Core项目依然由一个对应的.csproj文件来定义,图3所示的helloworld.csproj就是这么一个文件。

对于传统的.NET Framework应用来说,即使是一个空的C#项目,定义该项目的.csproj文件在内容和结构上都是很复杂的,因为这个.csproj文件的结构并不是面向开发者设计的,我们也不会直接编辑这个文件,而是利用Visual Studio通过设置当前项目的某些属性间接地修改它。但是对于一个.NET Core应用来说,这个.csproj文件的结构变得相对简单并清晰了一些,以至于作为开发人员的我们经常会直接编辑它。对于前面我们执行脚手架命令创建的控制台程序,定义项目的helloworld.csproj文件的完整内容如下。

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
</Project>

如上面的代码片段所示,这个helloworld.csproj是一个根节点为<Project>的XML文件,与项目相关的属性可以分组定义在相应的<PropertyGroup>节点下。这个helloworld.csproj文件实际上只定义了两个属性,分别是通过<OutputType><TargetFramework>节点表示的编译输出类型和目标框架。由于我们创建的是一个针对.NET Core 3.0的可执行控制台应用,所以目标框架为“netcoreapp3.0”,编译输出为Exe。

我们执行的dotnet new命令行除了帮助我们创建一个空的控制台程序之外,还会帮助我们生成一些初始化代码,这就是项目目录下的这个Program.cs文件的内容。如下所示的代码片段给出了定义在这个文件的整个C#代码的定义,我们可以看到它定义了代表程序入口点的Main方法,并在这个方法中将字符串“Hello World”打印在控制台上。

using System;
namespace helloworld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

通过执行脚手架命令行创建出来应用程序虽然简单,但是它却是一个完整的.NET Core应用,它可以在无需任何修改的情况下直接编译和运行。针对.NET Core应用的编译和运行同样是利用这个dotnet.exe命令行来完成的。如下图所示,在进入当前项目所在目录之后,我们执行dotnet build命令对这个控制台应用实施编译,由于默认采用Debug编译模式,所以编译生成的程序集会保存在\bin\debug\目录下。除此之外,针对不同目标框架编译生成的程序集是不同的,由于我们创建的是针对.NET Core 3.0的应用程序,所以最终生成的程序集被保存在“\bin\Debug\netcoreapp3.0\”目录下。

如果查看编译的输出目录,我们会发现两个同名(“helloworld”)的文件,一个是helloworld.dll,另一个是helloworld.exe,后者在尺寸上会大很多。很明显helloworld.exe是一个可以直接运行的可执行文件,而helloworld.dll仅仅是一个单纯的动态链接库,需要借助命令行dotnet.exe才能执行。

如图5所示,当我们在项目目录下执行dotnet run命令后,编译后的程序随即被执行,程序入口Main方法中指定的“Hello World”字符串被直接打印在控制台上。其实当我们执行dotnet run命令启动程序之前无需显示执行dotnet build对源代码实施编译,因为该命令会自动触发编译操作。在执行dotnet命令启动应用程序集的时候,我们也可以直接指定启动程序集的路径(dotnet bin\Debug\netcoreapp3.0\helloworld.dll)。

[ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]
[ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [中篇]
[ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]
[ASP.NET Core 3框架揭秘] 跨平台开发体验: Mac OS
[ASP.NET Core 3框架揭秘] 跨平台开发体验: Linux
[ASP.NET Core 3框架揭秘] 跨平台开发体验: Docker

---------------------
作者:
Artech

来源:CNBLOGS
原文:https://www.cnblogs.com/artech/p/inside-asp-net-core-01-01.html
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

[转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]的更多相关文章

  1. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]

    微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...

  2. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]

    由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...

  3. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [中篇]

    我们在<上篇>利用dotnet new命令创建了一个简单的控制台程序,接下来我们将它改造成一个ASP.NET Core应用.一个ASP.NET Core应用构建在ASP.NET Core框 ...

  4. [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]

    由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...

  5. [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [中篇]

    我们在<上篇>利用dotnet new命令创建了一个简单的控制台程序,接下来我们将它改造成一个ASP.NET Core应用.一个ASP.NET Core应用构建在ASP.NET Core框 ...

  6. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Docker

    对于一个 .NET Core开发人员,你可能没有使用过Docker,但是你不可能没有听说过Docker.Docker是Github上最受欢迎的开源项目之一,它号称要成为所有云应用的基石,并把互联网升级 ...

  7. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Linux

    如果想体验Linux环境下开发.NET Core应用,我们有多种选择.一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种Linux Distribution,目前来说像RHEL ...

  8. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Mac OS

    除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux Distribution(RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE等)都提供 ...

  9. 《ASP.NET Core 3框架揭秘》博文汇总

    在过去一段时间内,写了一系列关于ASP.NET Core 3相关的文章,其中绝大部分来源于即将出版的<ASP.NET Core 3框架揭秘>(博文只能算是"初稿",与书 ...

随机推荐

  1. 【Codeforces Round #430 (Div. 2) D】Vitya and Strange Lesson

    [链接]点击打开链接 [题意] 给出一个数组,每次操作将整个数组亦或一个数x,问得到的数组的结果中的mex.mex表示为自然数中第一个没有出现过的数. [题解] 异或的效果是可以累加的,所以不用每次都 ...

  2. 解决WSL上运行plantUML中文乱码问题

    生成UML图命令: java -jar plantuml.jar -charset UTF-8 my.txt 1. 保证my.txt 使用uft-8编码 2. wsl中安装中文字体: 如: sudo ...

  3. 关于background-image调整大小和位置的方法笔记

    遇到background-image的问题有点多,直接上网搜资料自己整理一下 <!DOCTYPE html> <html lang="en"> <he ...

  4. centos搭建svn 服务器 并同步到web 目录(总结)

    配置搭建步骤: Linux平台的SVN服务器的配置及搭建 从本地提交代码到svn代码库. 将代码库中代码同步到web目录: 1.在web目录中checkout版本库 进入/home/www目录下  ( ...

  5. Python学习笔记(三)Python基本数字类型及其简单操作(1)

    一.数字类型 表示数字或数值的数据类型称为数字类型,Python语言提供3种数字类型:整数.浮点数和复数,分别对应数学中的整数.实数和复数,下面就一起来了解一下他们吧! 1.整数类型 整数类型与数学中 ...

  6. django1.11启动错误

    错误信息: 复制代码 Unhandled exception in thread started by <function check_errors..wrapper at 0x10f03b8c ...

  7. 使用 javascript 替换 jQuery

    使用 javascript 替换 jQuery jQuery 曾风靡一个时代,大大降低了前端开发的门槛,丰富的插件也是前端开发者得心应手的武器库,但是,这个时代终于要落幕了.随着 JS 标准和浏览器的 ...

  8. JS的八大数据类型

    js中的数据类型,包括基本数据类型(Number,String,Boolean, Undefined,Null)和   复杂(引用)数据类型(Object,Array,Function) 基本数据类型 ...

  9. python ndarray相关操作:索引

  10. 【水滴石穿】react-native-ble-demo

    项目的话,是想打开蓝牙,然后连接设备 点击已经连接的设备,我们会看到一些设备 不过我这边在开启蓝牙的时候报错了 先放作者的项目地址: https://github.com/hezhii/react-n ...