微软在千禧年推出 .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

[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. SCRUM的四大支柱

    转自:http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html#tab-id-9 迭代开发 在Scrum的开发模式下,我们将开发周 ...

  2. Kubernetes集群部署核心步骤

    目录 前言 一.所有节点安装docker 二.所有节点安装kubeadm 三.安装master节点 四.部署网络插件 五.安装node节点 六.运行一个demo 前言 这里使用环境:Ubuntu 18 ...

  3. 一个简单的hibernate自动创建表

    导入关键jar 举炉石传说卡片说明,Card.java   Card.hbm.xml Card.java Card.hbm.xml <?xml version="1.0"?& ...

  4. R:ggplot2数据可视化——基础知识

    1 安装 # 获取ggplot2 最容易的就是下载整个tidyverse: install.packages("tidyverse") # 也可以选择只下载ggplot2: ins ...

  5. LeetCode - 字符串数字相乘与相加

    43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2& ...

  6. Erlang模块gen_fsm翻译

    模块摘要     通用有限状态机行为.   描述     用于实现有限状态机的行为模块.使用该模块实现的通用有限状态机进程(gen_fsm)将具有一组标准的接口函数,并包括用于跟踪和错误报告的功能.它 ...

  7. 解决rac错误 ORA-01102: cannot mount database in EXCLUSIVE mode

    启动 Oracle  11g RAC数据库时出现以下错误.只能启动其中一个节点(rac01),另一个节点启动不了(rac02).可能是以前修改cluster_database这个参数引起的.在Orac ...

  8. jps虚拟机进程状态工具

    jps(JVM Process Status Tool) jps工具可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine ...

  9. java基本数据类型与引用类型

    基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~3 ...

  10. 前端利器躬行记(6)——Fiddler

    Fiddler是一款免费的.基于Windows系统的代理服务器软件(即Web调试抓包工具),由Eric Lawrence用C#语言在2003年10月发布了第一个版本.注意,由于Fiddler依赖Mic ...