【ASP.NET Core】在Win 10 的 Linux 子系统中安装 .NET Core
在上一篇文章中,老周扯了一下在 Windows 10 中开启 Linux 子系统,并且进行了一些简单的设置。本篇咱们就往上面安装 .net core 。
老周假设你从来没有用过 Linux,所以,接着上一次的博文,老周先给您介绍几个可能比较常用的东东。
切换到 root 用户上下文
当你启动 Ubuntu 子系统后,你会看到,在你的用户名、机器名、路径名后有个 $ 符号。如下图。
这表示当前用户的权限是受到限制的,如果想要执行某些需要高权限的命令(这个类似于 Windows 中的以管理员身份运行),你需要在命令前面加上 sudo,比如
sudo command....
举个例子,删除某个目录下的所有文件。
sudo rm -rf ~/bin/*
不过,有些命令,你加上 sudo 后仍然会提示权限不够,在不修改权限的情况下(一般来说最好不改)可以切换到 root 上下文,方法是输入
或者省略 root ,直接输入 su ,默认也会切换到 root 上下文。
这时会提示你输入 root 的密码,但这个密码现在是随机的,你并不知道它是什么。
所以,我们要为 root 设置一个密码,输入
sudo passwd root
现在,你先要输入你的密码,就是刚刚初始化 Ubuntu 时你输入的那个密码。
现在你可以为 root 设置密码了。
你还要确认一次密码。
现在,root 的密码就设置完成了。
输入 su 后,输入刚刚设定的 root 密码,就可以切换到 root 上下文了。
这个时候,你会发现,工作目录后面的 $ 符号已经变成 # 符号了,表示这是超级用户的上下文。
如何访问 Windows 目录和文件
这个 Linux 子系统的一个好处是可以直接访问 Windows 目录和文件,如果用于开发测试,比虚拟机方便很多。
访问Windows文件的一个最简单的方法,你可以在任何目录下执行 Powershell 或者 CMD,然后输入 bash 命令,就可以用当前目录来作为工作目录,并进入 Liunx 子系统。
第二种方法,在 Linux 子系统中,通过 /mnt 下面的路径来访问。用过安卓模拟器的朋友应该知道这个目录。
举个例子,我要进入 D 盘下的 Apps 目录,可以输入
cd /mnt/d/apps
再比如,下面命令可以列出 C 盘下的 Windows/System32中的文件。
ls /mnt/c/Windows/System32
要注意大小写啊,而且路径分隔符要用 /。
离线安装 .NET Core SDK
关于.net core sdk 的安装,你可以根据微软官方的教程,直接照抄即可,详细请看: https://www.microsoft.com/net/learn/get-started/linuxubuntu
这里老周介绍一下如何离线安装,因为有些阉割版 Linux 服务器连 yum 或 apt 都没有。前段时间用阿里云的一个 CentOS 6.5,想升级到 7.0,结果那王八居然没有 yum ,想手动安装,结果下载了一堆的 rpm 包,都装不上,很多依赖库都丢失,实在折腾不下去了,就找阿里的技术支持,把它们 fuck 了一顿。
想执行 dotnet 命令,你得装 SDK ,不能装 runtime,runtime 是用不了 dotnet 命令的。
离线安装的好处就是你可以事先下载好包,然后传到服务器上去。当然,也可以在服务器上直接下载,用 wget 命令下载。
先切换到临时目录。
cd /tmp
然后输入wget命令下载。
wget https://download.microsoft.com/download/1/1/5/115B762D-2B41-4AF3-9A63-92D9680B9409/dotnet-sdk-2.1.4-linux-x64.tar.gz
这个下载,还是挺花时间的,所以,你可以坐下来喝两杯茶。直到 100% 就表示下载完了。
如果下载到半路挂了不动,你可以按【Ctrl + C】,然后它会重试继续下载,直到下载为止。如果实在不行,你可以在Windows中用迅雷等工具下,然后复制进Linux 目录就行了,复制用 cp 命令
cp /mnt/c/Users/xxx/Downloads/dotnet-sdk-2.1.-linux-x64.tar.gz /tmp/dotnet-sdk-2.1.-linux-x64.tar.gz
现在 ls 一下,看看 tmp 目录下是不是有个压包。
其实这个是不用安装的,直接解压出来就可以耍。
1、切换到你当前的目录下,输入 cd ~
2、用 mkdir 命令创建一个 dotnet 文件夹。
mkdir dotnet
然后用 cd 命令进入 /tmp,就是刚才下载文件存放的目录。
cd /tmp
3、把刚刚下载的那个 tar.gz 包解压到 /home/你的用户名/dotnet 目录下。
tar -zxf dotnet-sdk-2.1.-linux-x64.tar.gz -C ~/dotnet
-C 参数指定,解压出来的东西放到 /home/xxxx/dotnet 目录下,~/表示的就是 /home/用户名 目录。注意 -C 是大写字母!!!
- z表示用 gzip 算法处理文件,-x表示解压操作,-f是必须,表示你要操作的文件。上面的 -zxf是三个参数合起来使用,而且,-f 必须放到后面,因为 -f 后面必须指定文件名。最后 -C 指定工作目录。
大约等待十几秒,就解压完成了。
4、进入 /home/用户名/dotnet 目录。
cd ~/dotnet
然后用 ls 命令看看里面是否有东西。
然后,你可能会遇到这样的错误。
不要急,这是缺少了某个库导致,执行以下命令安装一下:
sudo apt install libunwind8
接着,你再执行一下:
~/dotnet/dotnet --info
如果看到以下内容,那恭喜发财,你的 .net SDK 可以正常运行了。
但是,你也发现了,执行 dotnet 命令很是不方便,路径太长。这时候你一定会想到,设置一下 PATH 环境变量。老周个人觉得嘛,不轻易改动环境变量是最好的方案,我们输入以下命令,看看 PATH 变量中都有哪些路径。
echo $PATH
输出内容如下。
于是,老周选择了 /home/zhou/bin,即 ~/bin。
用 cd ~ 切换到你的 home 目录下,然后 ls 一下,看看有没有 bin 目录。
显然是没有的,所以,创建一个 bin 目录。
mkdir bin
然后用 ln 创建一个符号链接,放到 bin 目录下,并且指向 dotnet/dotnet 文件。
ln -s ~/dotnet/dotnet ~/bin/dotnet
这样一来,你只需要执行 dotnet 就可以了。
在线安装 .NET Core SDK
其实官方的教程就是在线安装的,这里老周说一下另一种安装方法。
官方教程中用的是 apt-get 命令来安装的,其实我们可以用 apt 命令代替 apt-get。APT 是通过一系列的 source 来获取软件包的,这些source都是以后缀为 .list 的文件存放,主要在两个地方:
1)文件:/etc/apt/sources.list
2)目录:sources.list.d
一般来说,我们如果是自己定义的软件源,可以放到 sources.list.d 目录下,文件名以 .list 结尾。
默认情况下,sources.list 文件中的源都是 ubuntu 官方的,但是,国外的服务有时候很慢,有时候也经常挂,所以,我们不妨改为国内的源。国内的源可以网上找,老周一直都是用 163 的,优点是速度快。
方法是修改 sources.list 文件,你可以先进行备份,当然你不备份也行。要备份的话,可以用复制文件的命令。
先换到 apt 目录。
cd /etc/apt
然后
sudo cp sources.list sources.bak
这是系统目录,需要高的权限,所以要加上 sudo。
执行后,你就会看到备份的文件了。
接着,用 echo 命令把 sources.list 文件的内容清空。这时候你得 su 切换到 root 上下文,不然可能不让你写文件。
echo "" >sources.list
把空白字符串输出到文件中,就等于清空文件了,然后我们用 nano 来输入 163 的源,因为这个软件好像没有全选功能,反正老周是找不到可以全选的。
nano sources.list
然后,你每行一条,输入以下内容:
deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ xenial-backports main restricted universe multiverse
有这四条就够了,还有一条是可选,因为它用于测试版的软件。
deb http://mirrors.163.com/ubuntu/ xenial-proposed main restricted universe multiverse
输完之后,按 Ctrl + O 保存,在提示的文件名处,保留 sources.list 不要改动,这样就会替换文件的内容了。最后按 Ctrl + X 退出。
修改完 sources.list 后,我们还要添加微软的软件源,以便在线安装。
输入
cd sources.list.d
进入 sources.list.d 目录,接着输入:
echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > my.list
这样就把源 URL 写入到文件中,文件名为 my.list,存放在 sources.list.d 目录下。
更改完源后,你要执行一下 apt update ,更新源列表,这是必须的。
从输出内容看到,微软的源也在其中了,但,你看清楚了,有这么一行。
这个错误是获取不到有效的签名,如果你按照官方的教程,先注册签名,是不会有此错误的,但因为此次并没有按官方的教程操作。
请把错误信息中 NO_PUBKEY 后面的那个字符串记下来,等一下会用到。
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EB3E94ADBE1229CF
最后面那个字符串就是从错误信息中记下来的,执行上面这一条命令后,签名就被导入了。
然后你再执行一次 apt update。
这样就成功更新源了。
接着你可以通过以下命令,看一下跟 dotnet sdk 有关的 package。
apt list | grep dotnet-sdk-*
上面命令中有个管道符号(|),它会把前一条命令的执行结果传递到第二条命令。apt list 命令用来获取 source list 中查询到的软件包,然后列出来。列出来的软件包列表就传给 grep 命令,grep 命令可以使用正则表达式来查找内容,此处咱们匹配所有以 dotnet-sdk- 开头的包。
过滤后的结果如下图所示。
目前,.net sdk 的最新版本是 2.1.4,我们安装最新版本即可。
安装软件包,使用 apt install <包名称>。咱们安装 2.1.4。
sudo apt install dotnet-sdk-2.1.
如果你不执行 su 切换到 root 上下文,就要加上 sudo ,否则是没有权限安装的。
这时候它提示你,连同 SDK 一起安装的一堆软件包,并告诉你可能要占用 300 多MB的空间,然后问你是否安装。
如果你要安装,就输入 y 并回车,如果不想安装就输入 n 并回车。都走到这一步了,当然是要安装的了。
随后你就慢慢等吧,等它安装完成。
测试运行
启动 VS ,新建一个 ASP.NET Core 项目,假设项目名字叫做 MyApp。
然后让你选一个模板,对于 ASP.NET Core 项目,其实你选哪个模板都行,像什么 MVC ,什么 Web API,全部都是可以通过代码来开启,都是集成的,所以我说它比传统的 asp.net 要简单。
这里只为了验证,所以只选“空”模板就可以了。
等项目创建后,打开 Startup 类,找到 Configure 方法(注意,不是 ConfigureServices 方法,ConfigureServices 方法主要是开启应用程序的扩展功能的,你要用到什么就开启什么,比如 MVC),而 Configure 方法才是跟应用程序自身处理有关的,它通过各种称为“中间件”的玩意儿来处理 HTTP 请求。所谓中间件,你就理解为 HTTP 请求到达服务器后的各道“工序”,等所有中间件都对 HTTP 消息处理完毕后,就会返回给客户端(比如浏览器)。
把 Configure 方法改为以下代码。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Run(async (context) =>
{
await context.Response.WriteAsync("这是一个很强大的应用。");
});
}
如果调用的是 app.Use 或者 app.UseXXX,就是作为中间件来处理 http 请求。Use 方法是直接通过一个委托来处理 HTTP 请求,一般用于简单的处理,比如只有两三行代码,如果处理比较复杂(例如一些自定义的验证方案),就可以写一个中间件类,然后插入消息处理队列中。
这里调用了 Run 方法,因为代码很简单,只是返回一个字符串,不需要经过 N 个工序,Run 方法使得消息处理“短路”,不分工序直接一步完成,就返回给客户端。
打开 Program 类,把 Main 方法改为。
public class Program
{
public static void Main(string[] args)
{
var hostBuilder = new WebHostBuilder();
// 构造 web host
var host = hostBuilder.UseKestrel()
.UseStartup<Startup>()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseUrls("http://localhost:7000")
.Build();
// 运行 host
host.Run();
}
}
在构建 web host 时:
1、使用 Kestrel 作为 Server。
2、将当前目录作为应用的根目录。
3、在 7000 端口上监听客户端请求。
最后调用 Build 方法生成 host,所以你会看到,asp.net core 很灵活,很多功能你都可以随意增减。
在“解决方案资源管理”器窗口中,在项目节点上右击,从弹出的菜单中选择【发布】。
选择发布到文件夹。
发布后,打开发布目录,如下图所示。
然后以这个目录为工作目录,打开 Power shell 或CMD。
输入 bash 命令进入 Linux 子系统。输入:
dotnet MyApp.dll
注意文件名是区分大小写的。
看到以下信息,就说明 asp.net core 应用已经运行起来了。
打开浏览器,输入 http://localhost:7000,看看效果。
这时候你发现是乱码,可能你会想到在 Response.WriteAsync 方法调用时加上 Encoding 参数。
其实问题不是出在这里,而是出在 content-type 头上,所以,你应该加上:
app.Run(async (context) =>
{
context.Response.ContentType = "text/plain;charset=utf-8";
await context.Response.WriteAsync("这是一个很强大的应用。");
});
重新发布一下。然后再次从浏览器访问,如下图所示。
好了,今天的内容就说到这里了,下一篇,老周介绍一下如何配置 nginx 服务器。
【ASP.NET Core】在Win 10 的 Linux 子系统中安装 .NET Core的更多相关文章
- Windows 10 下 Linux 子系统的安装和使用
介绍 适用于 Windows 的 Linux 子系统(英语:Windows Subsystem for Linux,简称 WSL)是一个为在 Windows 10 和 Windows Server 2 ...
- Windows10系统的Linux子系统中安装MySQL数据库心得
后端开发童鞋们, 自己开发机用的是Windows系统电脑(台式机或笔记本), 而开发的程序和使用的数据库等要运行在Linux服务器上, 这种情况有木有? 提前声明: 本文并不讨论操作系统的比较, 以及 ...
- 【Asp.net Core】在 Linux 子系统中安装 nginx 并配置反向代理
上一篇鸟文中,老周已经介绍过在 Ubuntu 子系统中安装 dotnet-sdk 的方法,本文老周给大伙伴们说说安装 nginx 服务,并配置反向代理.同样,老周假设你从来没有用过 Linux,所以老 ...
- Win 10 启用Linux子系统---Kali 和Ubuntu子系统
注:转载请注明出处,谢谢!!! 一.Linux on Windows简介 Win10一周年版推出了用于Windows的Linux子系统这一功能.Linux子系统和Windows的结合真是有一种神互补. ...
- 尚学linux课程---10、linux环境下安装python
尚学linux课程---10.linux环境下安装python 一.总结 一句话总结: 直接在官网下载python的源码包即可,然后在linux下安装 linux下安装软件优先想到的的确是yum,但是 ...
- 【Docker】在Linux系统中安装Docker虚拟机、启动停止重启查看Docker命令
安装Docker 文章目录 安装Docker Docker虚拟机架构 在Linux系统中安装Docker虚拟机 管理Docker虚拟机 参考资料 Docker虚拟机架构 Docker创建的所有虚拟实例 ...
- 在 Linux 系统中安装Load Generator ,并在windows 调用方法
在 Linux 系统中安装Load Generator ,并在windows 调用 由于公司需要测试系统的最大用户承受能力,所以需要学习使用loadrunner.在安装的时候碰到了不少问题,所以写下此 ...
- 在Docker中安装.NET Core(使用命令行工具)
在Docker中安装.NET Core目前共有两种方法:1,使用命令行工具安装2,使用VS2017来安装 本文主要介绍使用命令行工具来安装: 1,安装Docker(如果本机已经有Docker环境,可以 ...
- 在Linux系统中安装caffe
学习深度学习已经很久了,但一直没有自己动手安装过caffe,因为工作需要,需要在linux系统中安装caffe,因此,在这里对安装过程进行记录. caffe配置起来比tensorflow更麻烦一些,我 ...
随机推荐
- Struts的使用
一.Struts2的获取 Struts的官方网站为:http://struts.apache.org/ 下载完Struts2的jar包,解压,Struts2资源包的目录结构如下图: apps目录下包含 ...
- CentOS 7 学习(一) 配置LAMP和Nginx
CentOS 7 学习(一) 配置LAMP和Nginx CentOS是RedHat Linux企业版的代码编译版本,属于比较通用的服务器Linux版本,据说Ubuntu Server更通用,呵呵,不过 ...
- 小白的Python之路 day2 文件操作
文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...
- Data Base mongodb高版本与低版本的区别
mongodb高版本与低版本的区别 一.mongodb引擎: Mongodb 3.0支持用户自定义存储引擎,用户可配置使用mmapv1或者wiredTiger存储引擎. 3.2版本以后默认的开启的是w ...
- SAP RFC介绍:关于sRFC,aRFC,tRFC,qRFC和bgRFC
大概八月份的时候做过一个有关两个SAP系统的财务集成的项目,使用到了RFC(Remote Function Call)技术.因为之前有着医疗-CRM相关接口开发的经验,以为自己对RFC很熟悉了,做起来 ...
- 随便说说 post-processing
九月份一篇博都没更新,这段时间一直在unity的坑里爬不起来,感觉真的很绝望啊,仿佛对生活都失去了信心. 渲染问题并没有解决,目前方案只是减轻视觉冲突,降低违和感.项目AR产品也做的越来越艰难,开始经 ...
- QA问答系统,QA匹配论文学习笔记
论文题目: WIKIQA: A Challenge Dataset for Open-Domain Question Answering 论文代码运行: 首先按照readme中的提示安装需要的部分 遇 ...
- IO流之字节流知识总结
IO流分为字符流和字节流. 字节流;可以读取任何文件,电脑以字节的方式储存 字符流:用来读取字符. 下面是我总结的思维导图. 相关练习代码 public class Demo { @Test publ ...
- 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD)
一些小的C/S项目(winform.WPF等),因需要访问操作数据库,但又不能把DB连接配置在客户端上,原因有很多,可能是DB连接无法直接访问,或客户端不想安装各种DB访问组件,或DB连接不想暴露在客 ...
- Nginx集群之.Net打造WebApp(支持IOS和安卓)
目录 1 大概思路... 1 2 Nginx集群之.Net打造WebApp(支持IOS和安卓) 1 3 安卓模拟器... 1 4 MUI框架... 3 ...