Windows 10 无线网卡折腾笔记

去年年底了,电信做活动,500M起的宽带升级,据说马上要1000M了。 不过安装后,师傅说你的网络硬件不行.

所以,花血本升级买了2个网络设备,5G,果然名不虚传, 网速100分。

以前,我的这2个网络设备总价格加起来不到150元,这次超过1,000元了,不过,物有所值。
网速刚刚的。

如果你是100M宽带就不要折腾了,网速对比不明显。

Step1: 路由器升级(京东价: ¥869.00)

因为我自己从事Linux技术工作,所以也希望业余时间在Linux下面折腾点好玩的,所以看中了有Linux系统的路由器,选来选取,这块

【京东】华硕(ASUS)RT-AC86U 2900M AC双频千兆路由器家用低辐射/游戏路由/高速路由

最新Instagram 包月赞,ins自动点赞加粉评论推广工具 wx 21372550  Windows 10 无线网卡折腾笔记 20191206205846

链接: https://www.xifarm.com/ASUS-RT-AC86U

Step2: 无线网卡升级(京东价: ¥269.00)

最新Instagram 包月赞,ins自动点赞加粉评论推广工具 wx 21372550  Windows 10 无线网卡折腾笔记 20191206204750

【京东】TP-LINK USB无线网卡 1900M高增益双频无线网卡穿墙王 台式机笔记本WiFi接收发射器 【1900M】旗舰双频无线网卡

小细节:1900M是加法 = 1300M 5G + 600M 2.4G

链接: https://www.xifarm.com/TP-LINK-1900M

Step3: Window 10系统配置升级

升级完硬件,速度对比老的硬件飞快了很多.

不过对比旁边的MacBook Pro,Windows 10d网速还有差距呢,郁闷。

继而在知乎查询5G知识:

802.11ac的5g wifi真的有用?
虽然5g wifi 理论峰值有1g的下行速率 但是 普通家庭的宽带最大撑死也只有20m了 连802.11n450m都都不能完美支持 确实在5g频段干扰会比较少 感觉就像一段公路 入口宽10米 出口由50变100有用么

为何更新了win10后无线wifi网速变慢

从打开的“无线网络连接 配置”窗口中,切换到“高级”选项卡,选中“802.11n bandwidth”项 ,并将其值更改为“20MHz/40MHz auto”。借此以提高Win10上网速度。

最新Instagram 包月赞,ins自动点赞加粉评论推广工具 wx 21372550  Windows 10 无线网卡折腾笔记 20191206205539

WIN10 无线网卡 WIFI 网络延迟高的解决办法听
关闭Windows 10的 默认设置:设置-隐私-位置-定位 关闭定位即可

使用WIFI热点扫描定位的步骤就是后台不停的扫描出附近热点列表。
然后根据扫描到的热点MAC地址对比数据库实现定位。
如果过于频繁的扫描,就会出现频繁的延迟2-3秒这种现象。
关闭后效果立竿见影。

最新Instagram 包月赞,ins自动点赞加粉评论推广工具 wx 21372550  Windows 10 无线网卡折腾笔记 20191206203059


Instagram老王特别提醒:路由器不要买500元以下的,USB无线网卡不要买100元以下的!

搭建Squid3 密码账号IP代理

上文中,说明了 Squid3 IP Proxy 隐藏原IP,这里就搭建Squid 3密码账号IP代理进行整理,涉及环境 Ubuntu 18.04。

Step 1: htpasswd 和 htdigest 工具

htpasswd和htdigest工具是用于生成Squid密码的,直接安装命令

sudo apt-get install apache2-utils

安装完成后,使用命令如下所示

htpasswd -c /etc/squid/.squid_users xifarm
New password:
Re-type new password:
Adding password for user xifarm

创建的密码在/etc/squid/.squid_users里面存储,我们可以再增加一个用户

htpasswd /etc/squid/.squid_users runwulink
New password:
Re-type new password:
Adding password for user runwulink

这里可以“查看”一下刚才创建的2个账号

cat /etc/squid/.squid_users
xifarm:$apr1$IyfTZICg$2fPImX5o14XC2KPF1kZWv/
runwulink:$apr1$5o0XKeto$m6c5B5KK5ZAK/7A/VIgYB/

验证账号密码用这个脚本–防止我们遗忘密码账号

chown squid /etc/squid/.squid_users
/usr/lib64/squid/basic_ncsa_auth /etc/squid/.squid_users
xifarm password
OK
runwulink password
OK

Step2: 配置squid.conf 密码账号

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/.squid_users
auth_param basic children 5
auth_param basic realm Proxy Authentication Required
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

acl auth_users proxy_auth xifarm runwulink
http_access allow auth_users

basic_ncsa_auth 配置密码文件路径 /etc/squid/.squid_users
auth_param basic children 5 指明了这里最多开放5个账号
auth_param basic casesensitive off 大小写不明感
acl auth_users proxy_auth xifarm runwulink

开启Squid测试

systemctl restart squid

Step3:代理使用

wget命令为例

wget google.com
–2019-12-1 00:38:21– http://google.com/
Connecting to 192.168.49.69:3128… connected.
Proxy request sent, awaiting response… 407 Proxy Authentication Required
2018-12-1 00:38:21 ERROR 407: Proxy Authentication Required.

这里会报407错误:密码账号没有设置原因。

wget –proxy-user=amos –proxy-password=password google.com
–2018-12-1 00:39:36– http://google.com/
Connecting to 192.168.49.69:3128… connected.
Proxy request sent, awaiting response… 301 Moved Permanently
Location: http://www.google.com/ [following]
–2018-12-1 00:39:37– http://www.google.com/
Reusing existing connection to 192.168.49.69:3128.
Proxy request sent, awaiting response… 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.8’

index.html.8 [ <=> ] 11.72K –.-KB/s in 0.1s

2018-12-1 00:39:38 (97.6 KB/s) – ‘index.html.8’ saved [12001]

小经验

  • 查询Squid错误的日志vi /var/log/squid/access.log
  • 注意命令行路径 /usr/lib/squid/basic_ncsa_auth 以你安装Squid的为准!
  • 默认是3128端口,这个端口已经被滥用了,注意修改端口,且适用Squid密码账号方式保护流量

我使用的Google搜素技巧

 

1. + 强制搜索

由于Google会忽略和过滤一些常用词(称为stop words / common words),如and、how等。使用+可以让搜索引擎强制包括这些词。使用+还可以强制过滤关键词变体形式(不让搜索结果出现关键词的其它形式),如单复数、动词时态、ing形式等等。

2. – 逻辑非

用于过滤-号后面的关键词。如:MP3 -MP4,表示只搜索MP3而不要MP4的搜索结果。 -号后面没有空格。

3. ~ 同义词

关键词前加波浪线。如:~table 。

4. * 通配符

如:Google was founded in * 。

5. ** 指数

作用同 ^ ,如:2**10 。

6. ” ” 引号

用引号精确搜索,有时可只用左侧引号。如:”Google hacking” = “Google hacking 。

7. | 逻辑或

作用同 OR ,如:Google hacking | hacks 。

8. .. 数字范围

用于限定数值范围,如:spring festival logo 2002..2009 。

9. define: 关键词定义

查询关键词的网络释义。如: define:google 。

10. ext/filetype: 限定搜索指定文件类型

作用同 filetype:
filetype: 限定搜索指定文件类型
作用同 ext: 如:filetype:pdf = ext:pdf 。目前文件类型支持如下格式:

Adobe Acrobat PDF (.pdf)
Adobe Postscript (.ps)
Autodesk DWF (.dwf)
Google地球 KML (.kml)
Google地球 KMZ (.kmz)
Lotus 1-2-3(wk1、wk2、wk3、wk4、wk5、wki、wks、wku)
Lotus WordPro (.lwp)
MacWrite (.mw)
Microsoft Excel (.xls)
Microsoft Powerpoint (.ppt)
Microsoft Word (.doc)
Microsoft Works(wks、wps、wdb)
Microsoft Write (.wri)
Rich Text Format富文本格式 (.rtf)
Shockwave Flash (.swf)
纯文本(ans、txt)

11. intitle: 限定搜索标题中含指定关键词的网页

如: intitle:google search guide 。限定多个关键词用 allintitle:

12. inurl: 限定搜索url中含指定关键词的网页

如: inurl:google search guide 。通过inurl:view.shtml 你可以找到在线的网络摄像头。 限定多个关键词用 allinurl:

13. inanchor: 限定搜索页面链接锚文本中含指定关键词的网页

如: inanchor:google search guide 。限定多个关键词用 allinanchor:
intext: 限定搜索正文文本(不含标题和链接)中含指定关键词的网页
如: intext:google vs mircosoft。

14. site: 限定搜索某网站的网页

如: site:www.xifarm.com

15. link: 搜索链向某网站/网址的网页

如: link:www.xifarm.com

16. related: 搜索与某网页相似或相关的页面

如: related:www.xifarm.com

17. cache: 搜索某网页在Google缓存(网页快照)中的旧版本

如: cache:www.xifarm.com

18. info: 综合查询某网页的信息,即列出上述四个命令

如: info:www.xifarm.com 。作用同 id:

19. 图片搜索与影视搜索

filetype: 限定搜索指定文件类型的图片,支持如下格式:
• filetype:jpg
• filetype:gif
• filetype:png
• filetype:bmp
imagesize: 限定搜索指定尺寸的图片,如: imagesize:800×600
URL 参数:加在图片搜索网页的 URL 后面,可以实现更精细的搜索
• &imgtype=news 资讯
• &imgtype=face 脸部特写
• &imgtype=clipart 剪贴画
• &imgtype=lineart 素描
• &imgtype=photo 照片
• &imgc=gray 黑白图片
• &imgc=mono 灰阶图片
• &imgc=color 全彩图片

20. google.com/ncr 无区域重定向

不用插件,js脚本显示星号密码

不用插件,js脚本显示星号密码

以前,我是用Chrome插件做这个这的–显示星号密码的。
今天,分享一个不用插件也能看到密码的工具,很有趣:

  • 步骤1: 新建一个书签,如“密码”
  • 步骤2: 下面这个js拷贝到网址
javascript:"use strict";!function(){var e,t;e=document.getElementsByTagName("input");for(var a=0;a<e.length;a++)if(t=e[a],"password"==t.type.toLowerCase())try{t.type="text"}catch(e){var r,n;r=document.createElement("input"),n=t.attributes;for(var o=0;o<n.length;o++){var i,c,d;i=n[o],c=i.nodeName,d=i.nodeValue,"type"!=c.toLowerCase()&&"height"!=c&&"width"!=c&!!d&&(r[c]=d)}t.parentNode.replaceChild(r,t)}}();

最新Instagram 包月赞,ins自动点赞加粉评论推广工具 wx 21372550  不用插件,js脚本显示星号密码 20191205170937

  • 步骤3:选择一个有星号的登录页面,点击“密码”书签试试

最新Instagram 包月赞,ins自动点赞加粉评论推广工具 wx 21372550  不用插件,js脚本显示星号密码 20191205171001

像黑客一样写博客–Pelican快速搭建静态博客

“像黑客一样写博客”,通过文本编辑器(Markdown编辑器)即可实现写博客,而且是静态的,很神奇吧,这里的方案是Pelican.

为啥叫 Pelican 这么奇怪的名字
“Pelican” is an anagram for calepin, which means “notebook” in French. ;)

Pelican 是基于Python实现的开源静态博客系统,所谓静态博客系统就是无需数据库,每一篇文章会事先渲染成HTML静态文件,访问速度非常快。所以今天给大家介绍下怎么使用Pelican。

安装 pelican

pip3 install pelican markdown –upgrade

创建项目

```
>mkdir blog  # 创建项目目录

>cd blog # 进入项目目录

\blog>pelican-quickstart  # 生成pelican骨架
Welcome to pelican-quickstart v3.7.1.

This script will help you create a new Pelican-based website.

Please answer the following questions so this script can generate the files
needed by Pelican.
...
Done. Your new project is available at \blog
```

安装过程过,会有很多需要你输入的配置项,如果不知道怎么填就直接忽略或者选择n,因为这些配置项在后面可以自己手动再添加的。

创建完成后生成的目录结构如下

.
├── Makefile # 管理博客
├── content/ #存放文章的源文件
├── develop_server.sh
├── fabfile.py
├── output/ #生成的静态文件存放目录
├── pelicanconf.py #博客配置文件
└── publishconf.py #发布文件

第一篇makedown文章

你的文章需要保存在content目录下,通常情况我们写文章采用markdown语法,所以,现在我们在content目录创建一篇文章,文章内容:

```
Title: My super title
Date: 2010-12-03 10:20
Modified: 2010-12-05 19:30
Category: Python
Tags: pelican, publishing
Slug: my-super-post
Authors: Alexis Metaireau, Conan Doyle
Summary: Short version for index and feeds
This is the content of my super blog post.
```

生成静态文件

pelican content

执行完成后,output 目录会多出一些文件,markdown文件最终也会转换成html文件放到该目录下

选择Apache 虚拟文件路径,启动你的博客网站吧: http://Youthblue.com

高级功能1:配置主题

在http://www.pelicanthemes.com/选择自己喜欢的主题
将从pelican-themes上下载主题到本地并安装
git clone https://github.com/getpelican/pelican-themes.git

在pelicanconf.py文件中,配置主题
THEME = “pelican-octopress-theme”

高级功能2:修改时区和默认的时间格式

TIMEZONE = ‘utc’
DATE_FORMATS = {
‘en’: ‘%a, %d %b %Y’,
‘jp’: ‘%Y-%m-%d(%a)’,
‘zh’: ‘%Y-%m-%d(%a)’,
}

AD:
http://kylinholding.com/

全球43 亿个 IPv4 地址正式耗尽了,未来IPV6会加速入场

长期以来,全球 IPv4 地址耗尽令人担忧,今天这一时刻终于来临。负责英国、欧洲、中东和部分中亚地区互联网资源分配的欧洲网络协调中心(RIPE NCC)宣布,其最后的 IPv4 地址空间储备池在 11 月 25 日 UTC + 1 15:35 完全耗尽,所有 43 亿个 IPv4 地址已分配完毕。这意味着没有更多的 IPv4 地址可以分配给 ISP 和其他大型网络基础设施提供商。

最新Instagram 包月赞,ins自动点赞加粉评论推广工具 wx 21372550  全球43 亿个 IPv4 地址正式耗尽了,未来IPV6会加速入场 20191129224400

该过程自 80 年代以来就已预见到。IP 地址的全球性管理机构为互联网号码分配局(IANA),其下有五个局域网际网络注册管理机构(RIR)。由 IANA 管理的 IPv4 位址,于 2011 年 1 月 31 日完全用尽。其他五个区域的可核发地址,除了为迁移 IPv6 而保留的最后一块 /8 地址外,也随之陆续用尽:亚太地区在 2011 年 4 月 15 日用尽,欧洲地区在 2012 年 9 月 14 日,拉丁美洲及加勒比海地区在 2014 年 6 月 10 日,北美地区在 2015 年 9 月 24 日,非洲地区在 2017 年 4 月 21 日。

IPv6 的出现是为了从根本上解决 IPv4 地址耗尽的问题。IPv4 版本的 IP 地址只有 4 字节大小,即 32 位长度的 IP 地址。IPv6 版本的 IP 地址有 16 字节大小,即 128 位的长度。

IPv6 技术在国家推进下全面进行。在 IPv4 时代,中国是没有根服务器的。全球被限制为总共 13 台根服务器,唯一主根部署在美国,其余 12 台辅根服务器有 9 台在美国,2 台在欧洲,1 台在日本。

为打破根服务器困局,中国领衔发起“雪人计划”(Yeti DNS Project),面向全球招募 25 个根服务器运营志愿单位,共同对 IPv6 根服务器运营、域名系统安全扩展密钥签名和密钥轮转等方面进行测试验证。到 2017 年“雪人计划”已在全球完成 25 台 IPv6(互联网协议第六版)根服务器架设,中国部署了其中的 4 台,由 1 台主根服务器和 3 台辅根服务器组成,打破了中国过去没有根服务器的困境。

最新Instagram 包月赞,ins自动点赞加粉评论推广工具 wx 21372550  全球43 亿个 IPv4 地址正式耗尽了,未来IPV6会加速入场 20191129224436

2017 年 11 月 26 日,中共中央办公厅、国务院办公厅印发《推进互联网协议第六版(IPv6)规模部署行动计划》。2018 年 6 月,三大运营商联合阿里云宣布,将全面对外提供 IPv6 服务,并计划在 2025 年前助推中国互联网真正实现“IPv6 Only”。2019 年 4 月 16 日,工业和信息化部发布《关于开展 2019 年 IPv6 网络就绪专项行动的通知》,计划于 2019 年末完成 13 个互联网骨干直联点 IPv6 的改造。

预期 IPv4 与 IPv6 将会共存于互联网一段较长的时间。在未来过渡的数十年间,将会有多种网络形态存在。在过渡初期阶段,IPv4 网络已经大量部署,而 IPv6 网络只是散落在各地的孤岛;然后逐步是 IPv4 和 IPv6 网络重叠;最后阶段,会以 IPv4 孤岛为主,直至 IPv4 全部消失。

原文:全球 IPv4 地址正式耗尽

Docker实践的自我认知

Docker实践的自我认知

前几天翻译了一篇文章,郁闷了好几天:
我自己.net阵营下开发已有经年。

在VS 2003年时代,在学校做毕业设计,一个Winform程序,单机版,SQL Server数据库十几个表,。

业务场景是的旅游管理系统,简单的一些CRUD操作,我用的
ADO.net,通过获得DataSet、DataReader,进行insert、select、update、delete。
反正系统没人用,自写自话,没有啥框架、分层概念(虽然理论上知道这些概念,但是实战中没有这个需求),就1个人使用,10几个表,几十条数据记录。

https://www.codeproject.com 看看文章、下载源码。
http://www.codeplex.com/ 微软出的源码共享平台

www.github.com 下载源码。

后来参加工作后,接触项目,慢慢框架、分层、缓存等等融入:核心是有需求场景、有数据量、有用户,技术就得更新升级。

IIS

轻量级网络服务器 Self Hosting Nancy

selfhost

SharpDevleop: plugin方式的

ORMs
方案1:NHibernate ORM to the .NET Framework
方案2:EF ( ADO.NET Entity Framework)
方案3:LINQ to SQL

iBATIS
在*.xml里面写SQL,由iBATIS进行DTO转换。

Select操作,表关联导致SQL优化。

插入数据库,涉及到批量。

如几十条记录,可以通过如下方式优化
性能分析:

foreach (var adjective in adjectives) {
    dataContext.AdjectivesExpanding.InsertOnSubmit(adjective)
    dataContext.SubmitChanges();
}

Or:

foreach (var adjective in adjectives) {
    dataContext.AdjectivesExpanding.InsertOnSubmit(adjective);
}
dataContext.SubmitChanges();

如果成百上千,则通过BCP进行批处理,项目中曾经通过BCP处理50万入库情况,速度在生产环境没问题。
BCP在Oracle、Sybase、SQL Server都支持。

Java Spring全家桶三件套,基本满足Java需求了。

Docker解决实际问题1:VPS搭建xifarm.com博客

采购了VPS,刚学习开始LAMP,大约需要1天,不会Ubuntu Linux系统走了很多弯路。
三四次反复实践后,通过shell批处理脚本,能在2~3小时内从0把VPS搭建好,换VPS方便极了。

在有了Docker后,找现成的LAMP镜像,短短20分钟即可搭建好(VPS在海外,Docker 网速不是问题)

即,效率从1天3小时20分钟,分别提高了70%,1000%
就这一点看,Docker在部署环境上,功不可没,极大提高了DevOps生产效率。

Docker解决实际问题2: Tensflow的学习

学习Python、学习Tensflow,配置环境是新人头大的事情。 Python默认安装的3.7最新版,但是Tensflow最好支持的是Python 3.5版本,还有其他环境,仅仅折腾Linux系统环境,以我的经历,半天都未必搞得定。
而有了Docker后,直接下载Tensflow镜像,20~30分钟时间即可开始写机器学习的hello world应用了,一下子飞了起来。
再也不用被烦人的环境配置问题困扰了。

做技术的,经常保持知识刷新,这个是必须的,尤其是teamLeader、架构师,吃老本很快就回出问题。

Docker docker实践的自我认知 Docker实践的自我认知 vGuay

Docker解决实际问题3: 干净环境的测试电脑。

快速干净部署一个虚拟机。

+------------+  docker build   +--------------+  docker run -dt   +-----------+  docker exec -it   +------+
| Dockerfile | --------------> |    Image     | --------------->  | Container | -----------------> | Bash |
+------------+                 +--------------+                   +-----------+                    +------+
                                 ^
                                 | docker pull
                                 |
                               +--------------+
                               |   Registry   |
                               +--------------+

执行MySQL报错

今天新采购了柒比贰WordPress主题,安装主题时候报错: MySQL命令行使用sql语句进行建表时,MySQL 报错,遇到同一个问题,写一篇博客来加深印象。

原SQL语句:

CREATE TABLE wp_zrz_order 
(
    order_address longtext
) CHARSET = utf8

执行报错:

    [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') CHARSET=utf8' at line 21]

20191014222352.png 执行MySQL报错 执行MySQL报错 20191014222352

这个问题是语法上的错误,在MySQL中,为了区分MySQL的关键字与普通字符,MySQL引入了一个反引号。在上述的sql语句中,数据库名称使用的是单引号而不是反引号,所以会就报了这个错误出来。修改后为:

CREATE TABLE `wp_zrz_order`
(
    order_address longtext
) CHARSET=utf8

在英文键盘输入环境下,按图示按钮输入反引号 `
20191014222803.png 执行MySQL报错 执行MySQL报错 20191014222803

推荐一下,柒比贰WordPress主题真的好用,比较适合国内情况,推荐。

完美解决 ERROR 1064 (42000): You have an error in your SQL

 今天新采购了[柒比贰WordPress主题](https://7b2.com/?i=vXxymqWPj),安装主题时候报错: MySQL命令行使用sql语句进行建表时,MySQL 报错,遇到同一个问题,写一篇博客来加深印象。   原SQL语句:“`CREATE TABLE wp_zrz_order (    order_address longtext) CHARSET = utf8“`执行报错:
        [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘) CHARSET=utf8’ at line 21] 
![20191014222352.png](http://pic.xifarm.com/.img/20191014222352.png)

这个问题是语法上的错误,在MySQL中,为了区分MySQL的关键字与普通字符,MySQL引入了一个反引号。在上述的sql语句中,数据库名称使用的是单引号而不是反引号,所以会就报了这个错误出来。修改后为:“`CREATE TABLE `wp_zrz_order`(    order_address longtext) CHARSET=utf8“`
在英文键盘输入环境下,按图示按钮输入反引号 `![20191014222803.png](http://pic.xifarm.com/.img/20191014222803.png)
推荐一下,[柒比贰WordPress主题](https://7b2.com/?i=vXxymqWPj)真的好用,比较适合国内情况,推荐。

.NET Core 很酷,你不得不知!

我一直回想我的第一篇博文,那是关于多个服务的服务器平台的详细教程,它使用 GitLab CI 在 AWS 上,当时使用单个命令行进行部署, 至今回想,令人感觉很酷。

image .NET Core 很酷,你不得不知! .NET Core 很酷,你不得不知! 1240

前几天,我偶然听说一些软件公司的 HR 在招聘原则上拒绝任何希望使用.NET 的候选人,原因如下:
.NET 是一个古老的封闭式生态系统,与其他更性感的开发平台截然不同,如 NodeJS 或 RubyRails,这些开发平台更加灵活和开放。.NET 实际上有点像 Java,但是,JAVA 拥有强大的开源生态圈、而且可以跨平台,关键的是 Java 不被邪恶的微软一家垄断。

当时,我正在我的个人 MacBook 上使用 C#和.NET Core 开发 Web 应用程序,我使用 Lambdas 函数,Linux EC2 和 Docker 容器在 AWS 上使用 GitLab 进行部署。我甚至 5 年前曾经在.NET Core 的官方开源 Github 存储库中 Pull 了一些代码和测试,这些存储库仍在其上。

毋庸置疑,我作为一名.NET 开发人员,听到这一点消息,我的内心开始觉得不舒服。

所以在此,我想做几个 demo,来告诉大家可以在 C#和.NET Core 中轻松快速地开发、部署,就像我们在 JavaScript 和 NodeJS 中所做的那样: 跨平台、开源、一个命令行搞定一切。

.NET Core 平台是什么?

当我们谈论.NET Core 平台时,事情很快变得比较复杂,在这里,我只引用官方文档:

  • .NET Core 运行时:类型系统,程序集加载,垃圾收集器,本机互操作和其他基本服务。 .NET Core 框架库提供原始数据类型,应用程序组合类型和基本实用程序。
  • ASP.NET 运行时:提供了一个框架,用于构建基于云的互联网应用程序,例如 Web 应用程序,IoT 应用程序和移动后端。
  • .NET Core CLI: 提供工具和语言编译器(Roslyn 和 F#)支持.NET Core 开发人员体验。
  • dotnet 工具:用于启动.NET Core 应用程序和 CLI 工具。它选择并托管运行时,提供程序集加载策略并启动应用程序和工具。

以上内容总结:

  • 运行时,可以通过执行.NET Core 的二进制文件。
  • ASP.NET Core 是一个框架和一组库,可以用来构建 Web 应用程序和 Web API。
  • .NET Core CLI 与其他平台 CLI 类似,允许创建,构建,发布,设置和支撑项目以及其他操作。

Hello world,动手操作吧:

我的目标是向您展示如何快速轻松地使用.NET Core 来创建应用程序和网站,就像使用 NodeJS 或 RubyRails 一样 – 让我们开始吧:

在 Linux 安装很简单 ; 只需点击此链接并选择您的发布,同时注册 Microsoft 密钥和 feed。
安装必要的软件包需要大约三、四个命令。

在 Linux Ubuntu 上,从终端看起来的样子:

wget -q https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2

安装完成后,通过如下命令进行测试是否成功:

dotnet --version
> 2.2.300

在 MacO 或 Windows 上安装.NET Core 更简单:只需从官方 Microsoft 门户下载安装包,安装程序为您自动完成这些工作,通常只需要几分钟。

Hello World!

在众所周知的程序教程中,首先创建一个控制台应用程序:显示 Hello World!。

通过命令行来创建文件夹,然后通过命令行创建控制台应用程序工程:

mkdir hello-world
cd hello-world
dotnet new console

你将得到如下文件结构:

hello-world
├── bin
├── obj
├── hello-world.csproj
├── Program.cs

您可以忽略 bin 和 obj 文件夹,这些文件夹仅用于构建和调试。 事实上,我在 VSCode 和 Git 上都忽略了它们。

.csproj 文件包含有关运行时,包,版本和其他项目配置属性的信息。 它默认很小。

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>

<OutputType>Exe</OutputType>

<TargetFramework>netcoreapp2.2</TargetFramework>

</PropertyGroup>

</Project>

最后,我们最重要的文件:Program.cs。

using System;
namespace HelloWorld
{
  class Program
  {
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
    }
  }
}

在这里,没有什么是棘手的 – 你有你的默认命名空间。 通过静态方法 Main()声明主入口点的类。 类或命名空间可以更改为您想要的任何内容,也不需要公开,Main 方法也不需要。 这里的类是内部的,方法是私有的。

唯一的限制是至少要有这个静态 Main 方法。 甚至参数都是可选的,但它们的存在是为了通过命令行执行提供对参数的访问。

现在,让我们运行应用程序:

dotnet run
> Hello World!

.NetCore, 就这么简单!

要获得可在具有.NET Core 运行时(此处为 2.2 版)的任何环境中部署的应用程序的发行版,只需按如下方式发布应用程序:

dotnet publish -c Release -o dist

生成的 dist 文件夹应如下所示:

dist
├── hello-world.deps.json
├── hello-world.dll
├── hello-world.pdb
├── hello-world.runtimeconfig.json

可以删除 hello-world.pdb,因为它仅用于调试目的,但默认情况下会生成 pdb,即使在发布模式下也是如此。 您可以通过将此代码段添加到 hello-world.csproj(在标记下)来禁用此自动生成 pdb。

<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugType>None</DebugType>
<DebugSymbols>false</DebugSymbols>

</PropertyGroup>

hello-world.dll 就是是您编译的代码,使用此运行时命令可执行:

dotnet hello-world.dll

deps.json 和 runtimeconfig.json 文件分别用于处理其他包的依赖关系和配置运行时。

最后,您可以使用 dotnet publish 运行时标识符目录轻松地在发布特定平台:

dotnet publish -c Release -r win-x64 -o dist/win-x64
dotnet publish -c Release -r osx-x64 -o dist/osx-x64
dotnet publish -c Release -r linux-x64 -o dist/linux-x64

Hello Web !

好吧,这很酷,我们很容易在控制台上写了一行,但是有些网络 Web 呢? 好吧,这也很容易做到!

首先,让我们添加 ASP.NET Core 的包:

dotnet add package Microsoft.AspNetCore

引用新包就像为 NodeJS 导入 npm 包一样。
这个包将允许我们配置,构建和运行一个简单的 WebHost 程序。 这可以在 Main()方法中的单行代码中完成。

生成的 Program.cs 应如下所示:

using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;


namespace HelloWorld
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Hello World!");


            WebHost.CreateDefaultBuilder()
                .Configure(app => app.Run(context => context.Response.WriteAsync("Hello World!")))
                .Build()
                .Run();
        }
    }
}

您可以使用与上面相同的命令来运行和构建应用程序:

dotnet run

现在打开你的浏览器,转到 http:// localhost:5000,享受这个简洁的 Hello World, 网页:

本文到此为止,本次实践完全基于 Macbook 电脑,在 Linux 命令行下完成,很酷,不是嘛。

在阅读完之后,我真的希望你对.NET Core 的看法有所改变:微软在多年前对.NetCore 进行开源, .NetCore 不仅仅只支持 Windows、而是可以跨平台和开源,令人兴奋的是是,到 2019 年秋天,.NET Core 3.0 即将问世,作为技术从业人员,这些惊喜的变化你不得不关注。