.NET Core 闹得风生水起的,什么性能甩XX几条街啊等等。恰逢 Visual Studio 2017 正式版又发布了(不过,macOS 下的 Visual Studio 2017 正式版还没有发布),就用 Visual Studio Code 测试了一下(网上看了一大堆的内容,都是用之前 .NET Core 测试版写的,看起来牛头不对马嘴,难受,这里记录一下)。
本文基于 macOS Sierra + Visual Studio Code 进行实验!
环境
- MacBook Pro 13 Retina 8G/256G
- macOS Sierra 10.12.3
- Visual Studio Code 1.10.2
- .NET Core 1.1
- 有疑问的话,认真找找官方文档,Hin 有帮助
整体步骤
- 在 macOS 上安装 Visual Studio Code
- 在 macOS 上安装 .NET Core(安装步骤跟着官网走就可以了,关了上面的网页的同学,可以看这里)
- 用 Visual Studio Code 建立解决方案和项目(MVC 和 Business)
多说一句,MVC 引用 Business 把人快整疯了,结果很简单,还是命令不熟悉的原因啊……
划重点:网上很多文章都说,要引用项目,就修改 project.json 吧啦吧啦的,我可以很负责任的告诉你:最新版本(v1.1)的 .NET Core 的项目结构已经改了,你绝对找不到该文件了!!!
下面正式开始
假设已经全部安装好了。安装好之后,各项组件如下:
- OpenSSL 1.0.2k 26 Jan 2017
- git version 2.12.0
安装好后,上面的组件都可用,只是版本不一定和这里一致,本人有强迫症,把各个组件都升级了。
打开 Visual Studio Code,然后按快捷键:ctrl + `(注意:ctrl 的组合键是数字键 1 前面那个波浪符号的键,不是单引号键,和 MySQL 中表名限制符一样),打开 Vusual Studio Code 的内置终端。
记住几个常用的终端命令:
-
mkdir
新建目录(文件夹) -
rm
删除目录(文件夹) -
cd
进入目录(文件夹) -
cd ..
返回上级目录(文件夹) -
cd \
返回根目录(文件夹)
1、用 mkdir
命令,建立项目文件夹,并用 cd
命令进入该目录(这里以 TestMVC 文件夹为例)。
mkdir TestMVC
cd TestMVC
2、开始建立解决方案和项目
记住几个重要的 .NET Core 的命令:
- 所有的指令,都是以
dotnet
开始的 -
dotnet new
新建内容,可以输入这个命令,后面不加任何内容,直接回车,可看到帮助说明,就知道了。 -
dotnet new sln
新建解决方案 -
dotnet new mvc
新建 MVC 项目(含项目结构和实例文件) -
dotnet new classlib
新建类库(即:Business 项目,其它项目以此类推) - 在命令后面添加
-o
参数,表示:新建的内容指定在哪个目录下(即:Output 的意思)
2.1 进入TestMVC 目录后,新建解决方案
// 后面无参的话,该命令会生成和当前目录名称同名的解决方案
// 如果需要了解各个参数,请详阅官方文档
dotnet new sln
2.2 新建 TestMVC.Web 项目,并将其添加到解决方案中
dotnet new mvc -o TestMVC.Web
dotnet sln add TestMVC.Web/TestMVC.Web.csproj
注意:MVC 项目建立好之后,默认框架为:netcoreapp1.1。
2.3 新建 TestMVC.Business 项目,并将其项目添加到解决方案中
dotnet new classlib -o TestMVC.Business
dotnet sln add TestMVC.Business/TestMVC.Business.csproj
注意:Lib 项目建立好之后,默认框架为:netstandard1.4。
2.4 在 TestMVC.Web 项目中添加 TestMVC.Business 的引用(这一步,目前网上很多内容都是老版本的方式,v1.1之后,改动很大,已经删除了 project.json 这个文件,MS 的意思是直接修改 csproj 文件。这也从侧面说明 .NET Core 目前还不能说完全稳定了。)
// 方法一:使用 dotnet 命令自动添加
dotnet add TestMVC.Web/TestMVC.Web.csproj reference TestMVC.Business/TestMVC.Business.csproj
// 方法二:手动修改配置文件添加
// 打开 TestMVC.Web.csproj 文件,添加以下 xml 内容:
<ItemGroup>
<ProjectReference Include="..\TestMVC.Business\TestMVC.Business.csproj" />
</ItemGroup>
2.5 释放整个项目的“包”,并起飞~~~
dotnet restore // 释放包
// 由于 run 命令已经包含了编译动作,所以,就不用单独 build 命令了
// 这里写出来,以备不时之需
// dotnet build
dotnet run // 运行
// 如果需要发布,可用 publish 命令
// dotnet publish
2.6 打开浏览器,输入:http://localhost:5000
,即可看到!
写在最后
- .NET Core 在 macOS 上是基于 Mono 的(估计非 Windows 平台的都是基于此的),微软估计会参与优化甚至重写这个底层,毕竟已经成立了 .NET 基金了。
- .NET Core 引入了 Package(包)的概念,彻底从原来臃肿的大而全的束缚中,解脱出来了,不得不说这是个壮举!赞一个!
- 正因为解脱出来了,加之新推出的 Web 服务器核心:Kestrel!运行性能等各方面的负担都要小得多了,速度不谓不快!
- 从原来的引用 DLL 变为现在的引用 Package,才有了上面 2.5 步骤中我称之为“释放包”的步骤。
- IIS 在 .NET Core 体系中的角色,已经变为了反向代理(需要安装:.NET Core Windows Server Hosting 软件包)的服务器了。所以,在 IIS 中,建立网站选择应用程序池的时候,不再选择托管代码。
最后的最后
.NET 整体框架,貌似还没完全统一。目前,这些概念貌似还有点容易混淆:
- .NET Stardand(我理解为以后 .NET 框架的最底层)
- .NET Framework(我理解为现行的这个Windows平台的分发包)
- .NET Core(我理解为跨平台的分发包)
- XAMARIN(目前本人暂无涉及)
以上这几个的理解,就是导致了新建的 MVC 和 Lib 的默认框架不一致的原因。
大致结构如下所示(来自官网):
各版本对应关系图(来自官网):