如果想体验Linux环境下开发.NET Core应用,我们有多种选择。一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种Linux Distribution,目前来说像RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE这些主流的Distribution都是支持的。如果读者朋友们觉得这种方式比较麻烦,我们也可以采用虚拟机的形式安装相应的Linux Distribution,比如我经常使用的都是安装在VirtualBox上的Ubuntu。对于X64 Windows 10的用户来说,我们有了第三种更为方便快捷的选择,那就是使用Windows 10提供的Linux子系统(WSL:Windows Subsystem for Linux),目前最新版本为WSL 2。

一、启用Linux子系统

WSL 2要求操作系统必须是“Windows 10 build 18917 ”或者更高的版本。在Windows 10上启用WSL 2只需要将“Virtual Machine Platform” 和“Windows Subsystem for Linux”这两个特性开启就可以了。我们可以采用两种方式来启用这两个特性,第一种在PowerShell中以如下的方式执行Enable-WindowsOptionalFeature命令(该命令需要以管理员身份执行)。

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

我们也可以采用可视化的方式来开启这两个特性。具体来说,我们可以通过“控制面板(Control Panel)”>“程序与功能(Programs and Features)”打开如下图所示的“程序与功能”对话框,并选择“Turn Windows features on or off)”打开“Windows Features”对话框。在勾选了“Virtual Machine Platform”和“Windows Subsytem for Linux”选项并确定并重启机器之后,针对Linux的Windows子系统就被启用了。

二、安装Linux

在启用WSL之后,我们可以根据需要安装对应的Linux Distribution。最方便的方式就是直接在Microsoft Store中下载并安装对应的Linux Distribution,比如Microsoft Store为我们提供了如下图所示的免费版Ubuntu 18.04 LTS。

如果Microsoft Store不可用(比如我的操作系统就是没有Microsoft Store的Windows 10 Enterprise LTSC版本),我们可以直接利用curl.exe or the Invoke-WebRequest以命令行的方式下载Linux安装包。下面列出了几种常用的Linux Distribution的下载地址。

  • Ubuntu 18.04: https://aka.ms/wsl-ubuntu-1804
  • Ubuntu 18.04 ARM: https://aka.ms/wsl-ubuntu-1804-arm
  • Ubuntu 16.04: https://aka.ms/wsl-ubuntu-1604
  • Debian GNU/Linux: https://aka.ms/wsl-debian-gnulinux
  • Kali Linux: https://aka.ms/wsl-kali-linux
  • OpenSUSE: https://aka.ms/wsl-opensuse-42
  • SLES: https://aka.ms/wsl-sles-12

当Linux被成功安装之后,我们可以在CMD命令行中执行bash命令进入Linux Bash Shell。如下图所示,我们在CMD命令行中执行bash命令之后会自动进入Linux Bash Shell。我们在Bash Shell中执行“lsb_release -a”命令输出当前安装的Linux Distribution的版本信息。如果想恢复到CMD命令行模式,我们只需要执行exit命令退出Bash Shell即可。

作为主系统的Windows和Linux子系统可以共享网络系统和文件系统。Windows下的文件系统直接挂载到“/mnt”目录下,所以Windows下的文件或者目录路径加上“/mnt”前缀就变成了基于Linux子系统下的路径。如上图所示,CMD命令行环境下的当前工作目录为“c:\Users\jinnan”,当我们切换到Bash Shell后,当前工作目录其实并没有发生变化,只是路径变成了“/mnt/c/Users/jinnan”而已。

三、安装开发环境

如果我们想在Linux下运行.NET Core应用,我们也只需要安装.NET Core SDK就可以了。针对不同的Linux Distribution,.NET Core SDK的安装略有不同。对于主流的Linux发行版本(RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE等), .NET Core官方站点上给出了安装.NET Core SDK的详细教程。对于我们安装的Ubuntu 18.04 LTS,.NET Core 3.0 SDK可以执行如下的命令进行安装。

~$ sudo apt-get update
~$ sudo apt-get install apt-transport-https
~$ sudo apt-get install dotnet-sdk-3.0

安装完成之后,我们可以执行dotnet --info命令查看当前.NET Core SDK的基本信息,如果得到如下图所示的输出结果,那就证明.NET Core SDK 3.0被成功安装。

四、创建一个ASP.NET Core应用

.NET Core SDK同样为Linux提供了dotnet这个重要的命令行工具,这意味着我们同样可以利用它提供的脚手架模板创建相应的.NET Core应用。这次我们直接创建一个空的ASP.NET Core 应用,为此我们在执行dotnet new命令的时候将模板名称指定为“web”。如下图所示,我们在执行dotnet new命令时的当前工作目录为“/mnt/c/helloworld”,也就是主系统Windows下的“c:\helloworld”,我们列出了该目录下的所有文件和子目录。

和在Windows和Mac OS X下利用脚手架命令创建的应用一样,我们在Linux下同样可以在无需对它们作任何更改的情况下直接运行它们,为此我们只需要在当前应用所在的目录下执行dotnet run命令即可。如下图所示,启动后的ASP .NET Core应用默认会绑定在5000(HTTP)和5001(HTTPS)端口进行请求监听,由于Linux是当前Windows的子系统而非虚拟机,所以主子系统可以共享网络,因此我们利用浏览器请求地址“http://localhost:5000”可以访问这个应用的主页。

[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框架揭秘] 跨平台开发体验: Linux的更多相关文章

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

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

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

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

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

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

  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框架揭秘] 跨平台开发体验: Windows [下篇]

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

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

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

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

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

  9. 《ASP.NET Core 3框架揭秘》读者群,欢迎加入

    作为一个17年的.NET开发者,我对一件事特别不能理解:我们的计算机图书市场充斥着一系列介绍ASP.NET Web Forms.ASP.NET MVC.ASP.NET Web API的书籍,但是却找不 ...

随机推荐

  1. [Odoo12基础教程]之第零篇-win中odoo12环境搭建

    所需材料 1.python3.7 2.pycharm社区版及以上 3.postgresSQL10 下载链接:https://www.enterprisedb.com/thank-you-downloa ...

  2. Docker从门外到入门使用

    取材 第一本Docker书.原作者:James Turnbull 安装 这里只说明Windows环境的安装(Windows7以上) 使用Docker Toolbox工具即可:http://mirror ...

  3. docker容器访问宿主机的IP——以rocketmq管理工具为例

    在宿主机(MacOS系统)上运行了原生的RocketMQ服务,为了方便管理,需要以Docker方式运行RocketMQ的管理工具——rocketmq-console (项目地址:https://git ...

  4. Android Saripaar 注解详解

    写这篇文章的原因 在移动端一般很少使用复杂的表单,一般针对于属性的更改都会打开一个新的页面进行更改.虽然不多,但是也会有.如果一个页面要输入的内容包括姓名.地址.邮箱.手机号等,对各个属性的验证会非常 ...

  5. Logistic回归算法梯度公式的推导

    最近学习Logistic回归算法,在网上看了许多博文,笔者觉得这篇文章http://blog.kamidox.com/logistic-regression.html写得最好.但其中有个关键问题没有讲 ...

  6. centOS系统安装-RabbitMq

    前言 消息通知机制是我们在日常业务开发总常常都会遇到:在微服务架构里,消息也是必不可少的,我们可以借助它异步实现很多业务,就拿我们日常的购物需求来说,在我们下单支付之后,我们就可以通过消息机制来异步处 ...

  7. 将String类型转换为int整数类型

    示例如下: public class demo { public static void main(String[] args) { String s="10"; 6 7 //St ...

  8. 以Python为例的Async / Await的编程基础

    来源:Redislabs 作者:Loris Cro 翻译:Kevin (公众号:中间件小哥) 近年来,许多编程语言都在努力改进它们的并发原语.Go 语言有 goroutines,Ruby 有 fibe ...

  9. mysql免密登录和修改密码

    (1)停止mysql服务      /etc/init.d/mysqld   stop (2)跳过密码验证      mysqld_safe  --skip-grant-tables  & ( ...

  10. PHP随机生成中国人姓名的类

    PHP随机生成类 <?php /*rndChinaName.class.php*/ Class rndChinaName { private $arrXing,$numbXing; privat ...