Linux (Windows Linux子系统)
Linux (Windows Linux子系统)
如果想体验Linux环境下开发和运行.NET Core应用,我们有多种选择。一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种Linux Distribution,目前来说像RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE这些主流的Distribution都是支持的。如果读者朋友们觉得这种方式比较麻烦,我们也可以采用虚拟机的形式安装相应的Linux Distribution,比如我经常使用的都是安装在VirtualBox上的Ubuntu。对于64为Windows 10的用户来说,我们有了第三种选择,那就是Windows 10提供的Linux子系统(WSL: Windows Subsystem for Linux),接下来我们就来演示在WSL上运行.NET Core应用。
一、启用Linux子系统
接下来我们来简单介绍一下如何启用Linux子系统。首选需要提醒读者朋友们的是:只有64位的Windows 10周年纪念版本才提供对Linux子系统的支持,如果你的Windows 10版本比较老,你需要将它升级到较新的版本。在这之后,我们需要开启系统的开发者模式(Developer Mode),对此我们只需要选择“设置(Settings)”>“更新与安全(Update and Security)”打开如下这个对话框。我们只需在左侧选择“针对开发人员(For developers)”,并在右侧提供的三个选项中选择“开发者模式(Developer Model)”。
系统的开发者模式被启用之后,我们需要通过“控制面板(Control Panel)”>“程序与功能(Programs and Features)”打开如下图所示的“程序与功能”对话框,并选择“启用或关闭Windows功能(Turn Windows features on or off)”打开“Windows功能”对话框。当我们勾选“适用于Linux的Windows子系统(Windows Subsytem for Linux”)选项并重启后,针对Linux的Windows子系统特性被正式启用。
当针对Linux的Windows子系统特性其中之后,系统赋予了我们一个名为lxrun的命令来管理这个子系统,我们可以利用它来安装、卸载和更新Linux系统。到目前为止,我们仅仅是开启了Linux子系统这个Windows特性,并没有一个具体的Linux Distribution被安装,所以我们现在需要做的就是以如下图所示的形式执行“lxrun /install”命令安装一个具体的Linux Distribution,该命令目前为我们安装的是Ubuntu。Linux子系统完成之后,我们只需要制定用户名和密码创建一个登录账号即可。
当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子系统下的路径。如图1-25所示,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的详细教程,在这里我们针对WSL的版本(Ubuntu 16.04.2 )简单介绍一下如何安装对应的SDK。
对于Ubuntu下安装.NET Core SDK,我们只需要执行apt-get安装对应的deb包就可以了,不过在这之前我们需要确保该包所在Feed的URL在本地被注册。至于该Feed URL的注册,则主要涉及到两个步骤,第一个步骤是注册用于检验deb包完整性的签名密钥(Signature Key)文件,该密钥编码后的内容(ASCII Armor)可以直接从地址“https://packages.microsoft.com/keys/microsoft.asc”下载。为了在本地注册该密钥文件,我们执行如下的命令下载该文件并执行“gpg --dearmor”将文本内容转换成二进制保存在文件“microsoft.gpg”,最终将后者保存到受信任密钥目录“/etc/apt/trusted.gpg.d”下。
~$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
~$ sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
完成针对签名密钥文件的注册之后,我们可以执行如下命令将在表示deb包源的“/etc/apt/sources.list.d”目录下创建一个dotnetdev.list文件,.NET Core SDK所在deb包对应的Feed URL(https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod)就包含在这个文件中。在这之后微软通过该Feed提供的所有的deb包都可以直接通过apt-get命令安装。
~$ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
当所在deb包的Feed被成功注册并通过执行apt-get update命令作相应同步操作之后,我们就可以按照如下的方式执行apt-get install命令安装.NET Core SDK了。值得一提的时候,如果你在本地曾经安装过之前的版本,你最好先将它们卸载。
~$ sudo apt-get update
~$ sudo apt-get install dotnet-sdk-2.0.0
安装完成之后,我们可以执行dotnet –info命令查看当前.NET Core SDK的基本信息,如果得到如下图所示的输出结果,那就证明.NET Core SDK被成功安装。
三、利用命令行创建一个ASP.NET Core MVC应用
.NET Core SDK同样为Linux提供了dotnet这个重要的命令行工具,意味着这我们同样可以利用它提供的脚手架模板创建相应的.NET Core应用。这次我们直接创建一个ASP.NET Core MVC,为此我们在执行dotnet new命令得时候将模板名称指定为“mvc”。如下图所示,我们在执行dotnet new命令时的当前工作目录为“/mnt/c/”,也就是主系统Windows下的“c:\”,所以创建出来的ASP .NET Core MVC应用所在的根目录为“c:\helloworld”,我们列了该目录下的所有文件和子目录。如果我们在Windows下执行相同的命令创建一个ASP.NET Core MVC命令,它也具有相同的目录结构和文件内容。
和在Windows和Mac OS X下利用脚手架命令创建的应用一样,我们在Linux下同样可以在无需对它们作任何更改的情况下直接运行它们,为此我们只需要在当前应用所在的目录下执行dotnet run命令即可。如下图所示,启动后的ASP .NET Core MVC应用默认会绑定在5000端口进行请求监听,由于Linux是当前Windows的子系统而非虚拟机,所以主子系统可以共享网络,因此我们利用浏览器请求地址“http://localhost:5000”可以访问这个应用的主页。
.NET Core多平台开发体验
.NET Core多平台开发体验[1]: Windows
.NET Core多平台开发体验[2]: Mac OS X
.NET Core多平台开发体验[3]: Linux
.NET Core多平台开发体验[4]: Docker
Linux (Windows Linux子系统)的更多相关文章
- .NET Core多平台开发体验[3]: Linux (Windows Linux子系统)
如果想体验Linux环境下开发和运行.NET Core应用,我们有多种选择.一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种Linux Distribution,目前来说像R ...
- Windows&Linux常用命令笔记
目录 linux windows Linux: 1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件. find . -name &qu ...
- Go交叉编译(Go语言Mac/Linux/Windows下交叉编译)
Go交叉编译(Go语言Mac/Linux/Windows下交叉编译) 2019/11/21 Chenxin 在很多时候,由于开发的方便,会有这样的场景出现,使用Mac开发或使用Windows开发,需要 ...
- windows linux 子系统及windows terminal的使用。
windows linux 子系统及windows terminal的使用. windows linux (wsl) 其实windows早就为我们准备好了子系统,但是我们的应用商店经常挂掉.因此都用不 ...
- Linux 与 Linux Windows 文件共享 小知识
Linux 与 Linux Windows 文件共享 前提说明:windows主机信息:192.168.1.100 帐号:abc 密码:123 共享文件夹:sharelinux主机信息:192.1 ...
- Windows Linux 之间rsync同步CODE文件
Windows Linux 之间rsync同步CODE文件 一.环境Windows:OS:Microsoft Windows Web Server 2008 SP1IP:192.168.88.197 ...
- 浅谈 Linux 内核无线子系统
浅谈 Linux 内核无线子系统 本文目录 1. 全局概览 2. 模块间接口 3. 数据路径与管理路径 4. 数据包是如何被发送? 5. 谈谈管理路径 6. 数据包又是如何被接收? 7. 总结一下 L ...
- mouse scrollings and zooming operations in linux & windows are opposite
mouse scrollings and zooming operations in linux & windows are opposite. windows中, 鼠标滚动的方向是: 查看页 ...
- linux/windows下启用和停止VMware后台服务的脚本
linux/windows下启用和停止VMware后台服务的脚本 linux/windows下启用和停止VMware后台服务的脚本 linux平台 windows平台 本文由乌合之众 lym瞎编,欢迎 ...
随机推荐
- lucene内置的评分函数
For multiterm queries, Lucene takes the Boolean model, TF/IDF, and the vector space model and combin ...
- c macro pair
成对使用的macro, 不过也有机会用错, 死都不知道怎么死的, 这宏... #define pthread_cleanup_push(func, val) \ { \ struct __darwin ...
- tf.stack和tf.unstack
import tensorflow as tf a = tf.constant([1,2,3]) b = tf.constant([4,5,6]) c1 = tf.stack([a,b],axis=0 ...
- composer镜像安装laravel
博主最近在学习Laravel的框架的相关知识,对于Laravel的许多新特性,大家最好还是去查看官网文档最好,Laravel的文档非常完善,中文英文的都有,可以很好的解决你的困惑. 但是我们会发现学习 ...
- SoapUI测试登录
实际登录过程为: 1. 打开/login页面 2. 登录 3. 自动调整至/dashboard页面 SoapUI的设计上,每一次请求后,都会清理掉cookie,于是设计的测试登录过程如下: 1. po ...
- maven 整合shh框架的pom.xml文件配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 《Java多线程编程核心技术》读后感(十二)
类ThreadLocal的使用 主要解决的是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程私有数据. 类ThreadLocal解决的是变量在不同线 ...
- 常用的Elasticseaerch检索技巧汇总
本篇博客是对前期工作中遇到ES坑的一些小结,顺手记录下,方便日后查阅. 0.前言 为了讲解不同类型ES检索,我们将要对包含以下类型的文档集合进行检索: . title 标题: . authors 作者 ...
- 廖雪峰的java教程
F:\教程\0-免费下载-廖雪峰 公司电脑地址: G:\学习中\廖雪峰的java教程 廖雪峰java课程地址: https://www.feiyangedu.com/category/JavaSE 0 ...
- 通过xpath获取对应的整个子节点信息
1.页面解析接口 package com.dajiangtai.djt_spider.service; import com.dajiangtai.djt_spider.entity.Page; /* ...