玩转Net Core 2.0跨平台开发(1)-跨平台开发和部署的介绍
官网已经有一个.net core的入手教程(https://www.microsoft.com/net/core#windowscmd),但这个教程完全没有顾及全宇宙第一IDE的感受。今天就跟大家体验一下在VS2017上开发.net core程序吧。
打开VS2017的新建项目面板,可以看到有两个新的分类:.Net Core和.Net Standard。
.Net Core下的工程还比较好理解,但是.Net Standard是怎么回事呢?下面看一张.net 架构图,可以帮助我们理解这个事情。简言之:.Net Standard是一组所有.Net平台( .NET Framework,.NET Core,和 Xamarin )都要实现的契约定义。 对于开发者而言,只需要掌握一种基础类库即可,当开发者在新的平台下开发应用时,将不再需要学习新的API知识。 这意味着,以 .NET Standard 作为目标平台的类库将可以在所有 .NET 所有平台上运行。
下面我们就来看看,如果运行一个最简单的NET Core程序,实现Windows和Linux的跨平台开发。
1.生成.net core的”Hello World!”解决方案
在VS2017的新建项目面板中,选择”控制台应用(.Net Core)”.数据项目名称,并点击下方的确定后,程序创建完成。
在自动生成的代码中,加入: Console.ReadLine(); 。然后点击键盘上的”F5″键,执行运行。
OK,我们的第一个程序就这样编写完成,并运行起来,非常的简单。
2.Windows下运行
.net core程序虽已写完,但是打开任务管理器,我们却无法找到ConsoleApp1.exe这个程序,只看到dotnet.exe程序。为什么会这样呢?这要从.net core的设计说起,给大家留个作业,自己找答案吧。
打开ConsoleApp1程序编译后的目录,发现里面也没有ConsoleApp1.exe文件。
怎样才能运行我们写的程序呢?其实很简单。打开 cmd,执行下面指令即可:
dotnet "【替换成你的项目路径】\ConsoleApp1.dll "
其中dotnet是.Net Core的运行容器名,后面是我们自己开发的程序入口。
3.Ubuntu16.04下运行
为了便于操作展示,安装Ubuntu 16.04 桌面版x64,首先需要安装Net Core2.0,参考如下:
https://www.microsoft.com/net/learn/get-started/linuxubuntu
将生成好的项目运行文件:ConsoleApp1.dll和ConsoleApp1.runtimeconfig.json,拷贝到Ubuntu系统的一个目录下。
在终端下,同样执行下面指令即可:
dotnet ConsoleApp1.dll
4. 独立部署 (SCD),采用发布的方式部署生成跨平台的.net core程序。
上面的部署方式属于”依赖框架的部署 (FDD)“,需要在windows系统中安装Net Core 2.0运行环境。
参考:https://docs.microsoft.com/zh-cn/dotnet/core/deploying/index#framework-dependent-deployments-fdd。
下面介绍另一种部署方式——独立部署 (SCD):
回到window开发环境,默认解决方案生成的项目运行目录下,只有.dll文件,没有.exe文件,那么如何生成exe可执行文件呢?
在项目上右键编辑ConsoleApp1.csproj,添加一行
<RuntimeIdentifier>win10-x64-corert</RuntimeIdentifier>
最终结果为:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> <RuntimeIdentifiers>win10-x64-corert;ubuntu.16.10-x64-corert</RuntimeIdentifiers> <StartupObject /> <ApplicationIcon /> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PlatformTarget>AnyCPU</PlatformTarget> </PropertyGroup> </Project>
说明:RuntimeIdentifier 用于标识程序编译时可生成的不同运行环境的程序版本。其值来自于:C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.platforms\2.0.0\runtime.json。
保存编辑信息,然后右键点击项目,选择”发布”,可以在生成目录下看到win10-x64-corert目录,此目录已经生成了exe文件。通过此方法,我们可以一次性编译各种环境下的程序文件。如果想更多的了解RID(RuntimeIdentifier ),请参考:https://docs.microsoft.com/zh-cn/dotnet/core/rid-catalog#rid-graph。
- 若下图”目标运行时”选择win10-x64-corert,则发布生成的是win10环境下运行的exe程序。
另外,见bin\Release\PublishOutput这个目录,若将这个目录拷贝到没有安装net core的win10下一样可以运行。
2)若下图”目标运行时”选择ubuntu.16.10-x64-corert,则发布生成的是Ubuntu16.04环境下运行的程序。
将bin\Release\PublishOutput拷贝到Ubuntu下。
直接执行./ConsoleApp1这个命令便可。