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

2023-11-16

微软在千禧年推出 .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全新的开发体验。

一、安装开发环境

搜小说 https://shupu.org/

.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的版本、运行时环境以及本机按照的所有运行时版本。

image

二、选择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”列出当前安装的脚手架模板。

image

上图列出的就是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就是这么一个文件。

image

对于传统的.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\”目录下。

image

如果查看编译的输出目录,我们会发现两个同名(“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)。

image

[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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 【编程测试题】连续最大和

    题目描述 一个数组有 N 个元素 求连续子数组的最大和 例如 1 2 1 和最大的连续子数组为 2 1 其和为 3 输入描述 输入为两行 第一行一个整数n 1 lt n lt 100000 表示一共有n个元素 第二行为n个数 即每个元素 每
  • 目标检测数据集分析

    原文链接 https ghlcode cn pages 250d97 目标检测数据集分析 新增支持数据集可视化 Ghlerrix DataAnalyze 平时我们经常需要对我们的数据集进行各种分析 以便我们找到更好的提高方式 所以我将我平时
  • ERROR! MySQL server PID file could not be found!解决方案

    首先怀疑是有僵尸mysqld的存在 首先查看进程 ps ef grep mysqld 然后用 kill 9 进程号杀死进程 重启mysql 但是问题并没有得到解决 再然后可以通过mysql的配置文件my cnf查看一下mysql的数据存储目
  • Python + ttkbootstrap 制作全网小说下载神器

    前言 ttkbootstrap是一个基于Python的开源库 用于创建漂亮且交互式的GUI应用程序 它是在Tkinter框架之上构建的 提供了一系列的Widget组件和样式 可以帮助开发者快速构建现代化的用户界面 今天做的是这个东西 蓝色的
  • Tensorflow 简单线性规划和逻辑回归

    Tensorflow 简单线性规划和逻辑回归 摘要 Tensorflow 中单变量线性回归 多变量的情况 用 tensorflow进行逻辑回归分类 参考文献 摘要 线性规划和逻辑回归分别是回归 regression 和分类 classifi
  • flask学习笔记(一)

    1 为什么要用web框架 稳定性和可扩展性强 可以降低开发难度 提升开发效率 总结 避免重复造轮子 2 Flask简介 Flask是轻量级web开发框架 Flask本身相当于一个内核 其框架核心包含 WSGI工具箱采用Werkzeug 路由
  • 基于ZYNQ FPGA的8路ADC数据采集与存储实现

    基于ZYNQ FPGA的8路ADC数据采集与存储实现 概述 在工程设计和科学研究中 数据采集与存储是一个重要的任务 为了满足高速 高精度和大容量的数据采集需求 本文将介绍如何基于ZYNQ FPGA平台实现8路ADC数据采集与存储 通过合理的
  • 如果android的广播注册后没有取消注册会发生什么?》,android – 我是否需要取消注册“匿名”BroadcastReceiver...

    我最近问了一个关于检查已发送短信状态的问题 给出的答案是一个代码片段 注册了两个 匿名内部 如果不正确 请更正我的术语 BroadcastReceivers监听短信发送 传送的广播 这些接收器只需要接收有关我的应用程序刚刚发送的SMS的数据
  • C/C++ 浮点数大小比较问题

    1 c 中浮点数注意 The important rule to remember is that powers of two and integer multiples thereof can be perfectly represent
  • ORACLE 造数脚本

    SELECT DBMS RANDOM VALUE FROM DUAL SELECT DBMS RANDOM VALUE 20 30 FROM DUAL SELECT DBMS RANDOM NORMAL FROM DUAL SELECT D
  • Base64编码(汇编版,未做过多优化,性能自认为还可以)

    感谢 DelphiGuy 于 2010 10 08 17 27 37 给出的提醒 function GetSizeCoder3To4 InputCount Integer Integer inline begin Result InputC
  • 本地映射到外网

    很多人做开发的苦恼 外网访问不了本地 很多调试进行不了 比如说微信开发 这个时候要用手机调试 但是服务器在自己电脑上 外网访问不了 这个时候我们可以用一些工具 使我们的内网ip映射到外网 让外网可以访问 一 使用ngrok让微信公众平台通过
  • POST请求常见错误及解决办法

    POST请求常见错误及解决办法 前后端分离 已经是web开发的主流 在前后端对接的过程中难免会碰到各式各样的问题 本文对近期项目中遇到的与 POST请求 有关的问题做了一个简要的汇总和分析 并列出了与之相关的解决办法 问题一 POST请求发
  • 区块链之java调用智能合约(二)部署智能合约

    前言 上一节 已经说过 如何的创建一个合约 如何编译合约 然后在java中调用 但是呢 这些还远远不够 那么还差哪些呢 现在就是如何将创建的智能合约部署的对应的共链 私链 测试链中了 需要部署后 才能真正的使用 现在就讲讲如何部署智能合约
  • linux下gcc的使用教程,Linux下GCC使用方法简介

    编译 第一步 是进行预编译 使用 E参数可以让GCC在预处理结束后停止编译过程 gcc E hello c o hello i 预处理的宏定义插入到hello i中 第二步 是将hello i编译为目标代码 这可以通过使用 c参数来完成 g
  • C++使用string的大数运算(6)模加模减模乘模幂

    本次项目目标 使用C 完成对于大数的相关运算 项目要点 1 大数指的是远超long long int的数据 2 将大数用矩阵进行存储 并通过矩阵实现运算 3 本人采用字符串进行存储 应注意char的特点 比如 char a 161 cout
  • 数据挖掘:银行评分卡制作——数据分箱、WOE、IV的意义

    在银行评分卡的项目中 通常都会需要把数据分箱 分箱后并不是对数据进行哑变量处理 而是用WOE值去替换 再放入模型中 学习的过程中会对这些操作有些疑问 比如 数据分箱有什么意义 WOE和IV值是干什么的 这里对这些数据处理的意义进行一个说明
  • [OpenAirInterface实战-6] :OAI在github中源代码的存放结构

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 OpenAirInterface实战 6 OAI在github中源代码的存放结构 文火冰糖 王文兵 的博客 CSDN博客 目录 第1章 基本
  • Zookeeper的常见面试题

    1 Zookeeper 1 1 Zookeeper基本概念 Zookeeper作为一个优秀高效且可靠的分布式协调框架 ZooKeeper 在解决分布式数据一致性问题时并没有直接使用Paxos算法 而是专门定制了一致性协议叫做 ZAB Zoo
  • 芯片低功耗设计原则

    原则1 按照自顶向下 从架构级到门级 的方法 在不同设计层次上对功耗进行优化 设计层次越高 优化所能达到的效果越好 原则2 从系统级着眼全局 从细节处精打细算 从产品解决方案角度而不局限于芯片本身来进行功耗预算 并根据功耗的分析结果 优化系

随机推荐

  • xxl-job任务详解

    文章目录 任务管理 新增任务页面字段释义 1 1 路由策略 1 2 运行模式 BEAN模式 GLUE模式 1 3 阻塞处理策略 1 4 子任务ID 1 5 JobHandler 1 6 Cron 1 7 任务超时时间 任务操作 任务管理 新
  • labview与matlab接口,LabVIEW Comms与MATLAB®的互联接口

    为了复用现有的MATLAB 代码 LabVIEW Communications System Design Suite LabVIEW Comms 新增了MATLAB专用接口的功能 无线原型的开发者可使用已有的MATLAB函数或脚本 将其连
  • 图片占位符在线工具

    简介 在前端的开发中 有时需要加载各种尺寸的图片 而在开发阶段 这些真实的图片可能并未制作完成 因此 我们可以使用图片占位符工具生成假的图片进行替代 本文介绍一款十分灵活的图片占位符工具 您只需在调用API服务时修改图片尺寸参数就可以生成不
  • 机器学习入门教学——可解释性

    1 前言 近年来 机器学习模型被广泛地应用到现实生活中的一些重要领域 如面部识别 自动驾驶 语言处理和智慧医疗等 然而 机器学习模型就像一个黑盒子 给予一个输入 就能得到一个决策结果 但是我们并不知道模型是如何做决策的 因此 可解释性旨在帮
  • Struts2标签与jsp页面Java代码的值相互使用

    业务需求 Struts标签使用Jsp页面中的list的值 java代码使用Struts传来的值
  • 从ChatGPT与New Bing看程序员为什么要学习算法?

    文章目录 为什么要学习数据结构和算法 ChatGPT与NEW Bing 的回答 想要通关大厂面试 就不能让数据结构和算法拖了后腿 业务开发工程师 你真的愿意做一辈子CRUD boy吗 对编程还有追求 不想被行业淘汰 那就不要只会写凑合能用的
  • 51单片机PCA模块配置

    PCA模块是 可编程计数器阵列 的缩写 英文名称是 Programmable Counter Array 以下的说明均以SILICON LAB生产的C8051系列微型控制器为例 PCA包括1个16位 定时器 计数器 和5个 捕获 比较模块
  • 动态规划算法(背包问题)

    1 应用场景 背包问题 背包问题 有一个背包 容量为4磅 现有如下物品 1 要求达到的目标为装入的背包的总价值最大 并且重量不超出 2 要求装入的物品不能重复 2 动态规划算法介绍 1 动态规划 Dynamic Programming 算法
  • Python datetime模块中strptime和strftime的区别和使用方法

    strptime和strftime是两个比较容易搞混的函数 今天恰好用到 在这里做一个总结 strptime p表示parse 表示分析的意思 所以strptime是给定一个时间字符串和分析模式 返回一个时间对象 strftime f表示f
  • 【C++技能树】多态解析

    Halo 这里是Ppeua 平时主要更新C 数据结构算法 Linux与ROS 感兴趣就关注我bua 文章目录 0 多态的概念 0 1 多态的定义 1 重写 2 Final与Override 3 抽象类 4 多态中的内存分布 4 1虚表存在哪
  • 夜神模拟器-软件apk存放目录

    1 打开文件管理器 2 点sdcard 3 点tencent 4 点tassistant 5 点apk 6 我们下载好的apk就在这个位置 我们每安装好这个apk后 包将会被自动删除 所以图片中没有显示
  • JUC常用类解析

    CountDownLatch类 CountDownLatch 英文翻译为倒计时锁存器 是一个同步辅助类 在完成一组正在其他线程中执行的操作之前 它允许一个或多个线程一直等待 CountDownLatch有一个正数计数器 countDown
  • Mysql的物理文件组成

    一 日志文件 1 1 错误日志 记录了mysql运行过程中较为严重的错误信息 以及启动和关闭的信息 默认命名hostname err 可以在参数文件中加上 log error file name 修改目录名和文件名 flush logs 命
  • Angular Tracy 小笔记 安装,目录结构介绍

    Angular 安装 目录结构介绍 Angular 4 0 安装 组件是 Angular 的核心思想 Angular 支持跨平台 手机 PC 都可以 是谷歌创建的 JS 框架 Single Page Application 单页应用 一些a
  • jmeter模拟不同ip并发请求

    Jmeter是 Apache 组织的开放源代码项目 它是功能和性能测试的工具 100 的用java实现 目前版本2 3 4 一直在用jmeter做压力测试 越来越觉得它功能强大 前段时间看有朋友说不能模拟不同ip进行并发测试 抽空研究了一下
  • Pixi.js 显示文字无法换行

    官方案例 message style wordWrap true wordWrapWidth 100 align center 中文无法换行 设置breakWords属性 sprite style wordWrap true wordWra
  • 03:一文全解:使用Tensorflow搭建卷积神经网络CNN识别手写数字图片

    标签 空格分隔 王小草Tensorflow笔记 笔记整理者 王小草 笔记整理时间 2017年2月25日 官方文档原文地址 https www tensorflow org get started mnist pros 官方文档最近更新时间
  • C语言停车场管理系统,使用栈和队列实现

    使用栈和队列实现的狭长停车场管理 1 情况说明 1 停车场结构为一条狭长的通道 可视为栈 2 若停车场内车辆已经停满 后来的车需要在路边排队等待 库内有车出来才能入库 可视为队列 3 使用A代表入库 D代表出库 车辆信息包括入库时间和车牌
  • Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]

    解决方法 1 卸载IAR 2 以管理员身份打开IAR安装包 3 以管理员身份打开IAR注册机 4 正常安装即可 5 安装完成后以管理员身份打开IAR 编译程序就会正常
  • [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]

    微软在千禧年推出 NET战略 并在两年后推出第一个版本的 NET Framework和IDE Visual Studio NET 2002 后来改名为Visual Studio 如果你是一个资深的 NET程序员 相信传统的 NET应用的开发