C#编程魔法书
上QQ阅读APP看书,第一时间看更新

1.4 多操作系统支持

前文说过,只要在新的操作系统上按照CLI规范实现.NET CLR虚拟机,即可无缝执行.NET托管程序。从2004年6月开始,由Novell(由Xamarin发起)和微软赞助的开源项目Mono第一版发布,其支持在大多数Linux发行版、BSD、macOS、Solaris和Windows等操作系统上运行.NET托管程序。从2016年6月开始,微软也发布了跨平台、支持在Windows、macOS和Linux等操作系统上执行.NET托管程序的.NET Core,代码也在GitHub上开源。在本节中,我们先了解.NET Core的使用方法,再了解Mono的使用方法。笔者使用Ubuntu 14.04作为开发环境讲解这两个项目的使用。由于篇幅限制,本节不再讲解其在其他操作系统上的安装和使用方法,有兴趣的读者请浏览官网文档自行尝试。

Mono和.NET Core都是开源项目,它们的官网和源码地址如下。

  • Mono官网:http://www.mono-project.com/。
  • Mono源码:https://GitHub.com/mono/mono。
  • .NET Core官网:https://dotnet.GitHub.io/。
  • .NET Core源码:https://GitHub.com/dotnet/core。

1.4.1 在Ubuntu 14.04上安装和使用.NET Core

本节只讲解在Ubuntu 14.04上安装.NET Core的步骤,不同Ubuntu版本略有不同,使用其他Ubuntu版本的读者请参照官网文档操作(地址:https://www.microsoft.com/net/learn/get-started/linuxubuntu)。

1)要在Ubuntu上安装.NET Core,需要先添加.NET产品源(如代码清单1-3所示),每台机器只需要操作一次即可。

代码清单1-3 添加.NET产品源

# 将微软签名密钥注册到apt安装包可信密钥列表中
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg

# 注册微软产品源
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main" > /etc/apt/sources.list.d/dotnetdev.list'

2)按照代码清单1-4中的步骤安装.NET SDK。

代码清单1-4 在Ubuntu上安装.NET SDK

# 安装.NET SDK
sudo apt-get update
sudo apt-get install dotnet-sdk-2.0.2

3)等待安装程序执行完毕后,键入下面的命令创建一个新的dotnet core工程,并将helloworld文件夹中的Program.cs的内容更换成代码清单1-5所示的代码。

代码清单1-5 在Ubuntu上新建dotnet core工程

# 创建新的dotnet core程序
dotnet new console -o helloworld
cd helloworld

4)最后按代码清单1-6中的做法,输入dotnet run命令就可以启动编译并执行生成的程序了。

代码清单1-6 在Ubuntu上编译并执行dotnet core程序

# 运行程序
dotnet run

5)也可以只执行生成的程序,也就是不进行编译,如代码清单1-7所示。

代码清单1-7 在Ubuntu上执行dotnet core程序

# 只运行生成的程序
cd bin/Debug/netcoreapp2.0
dotnet helloworld.dll

6)最后结果如图1-12所示。

024-01

图1-12 在Ubuntu上执行dotnet core程序

1.4.2 跨平台运行.NET Core程序

.NET Core是跨平台的,而且Visual Studio 2017内置了对.NET Core的支持。我们可以在Windows上使用Visual Studio开发好.NET Core程序,然后将其部署到Linux或者macOS机器上运行。

1)启动Visual Studio 2017,依次点击菜单栏上的“文件”→“新建”→“项目”命令,打开“新建项目”对话框,选择Visual C#模板列表,然后在右侧选中“控制台应用”(.NET Core)选项,在“名称”文本框中输入helloworlddotnetcore,在“位置”下拉列表框里输入工程的保存位置,点击“确定”按钮创建工程,如图1-13所示。

025-01

图1-13 在Visual Studio中新建dotnet core工程

2)新建的工程默认是一个helloworld工程,依次点击菜单栏上的“生成”→“生成解决方案”,或者同时按键盘上的Ctrl + Shift + B键编译代码。生成的程序保存在当前工程所在目录的bin\Debug\netcoreapp2.0文件夹中。

3)在Windows开发机器上将netcoreapp2.0文件夹复制到Ubuntu机器上,在net-coreapp2.0文件夹中使用如下dotnet命令执行生成的程序:

dotnet helloworlddotnetcore.dll

4)执行结果如图1-14所示。

025-02

图1-14 在Ubuntu上运行Windows上生成的dotnet core程序

1.4.3 在Ubuntu 14.04上安装和使用Mono

与安装.NET Core类似,安装Mono也需要先注册Mono产品源,然后使用apt-get命令安装Mono环境。

1)添加并注册Mono产品源,如代码清单1-8所示。

代码清单1-8 添加Mono产品源

# 添加Mono产品源
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo"deb http://download.mono-project.com/repo/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/mono-official.list
sudo apt-get update

2)输入代码清单1-9中的命令,使用apt-get命令安装Mono。

代码清单1-9 安装Mono

# 安装Mono
sudo apt-get install mono-devel

3)Mono实现了一个C#编译器,名为mcs.exe。其可以直接在Linux环境下编译C#源码。安装好Mono后,使用Linux上的文本编辑器,如vi或者nano,将代码清单1-10所示的代码保存到hello.cs文件中。msc.exe的使用方法与csc.exe类似,直接将需要编译的C#源文件作为参数传递给它即可编译。

代码清单1-10 使用msc.exe编译hello.cs

mcs hello.cs

4)使用Mono运行生成的hello.exe可执行程序,如代码清单1-11。

代码清单1-11 使用Mono在Ubuntu上执行.NET程序

mono hello.exe

5)安装最新版Mono时,我们可以将.NET程序当作原生Linux程序执行,即可以使用命令“./hello.exe”(注意,hello.exe前面的点号和斜杠)直接执行生成的.NET程序。

6)Mono实现了很多.NET框架的功能,因此在Windows上开发的.NET程序(注意,不是.NET Core程序)可以直接使用Mono执行。如在Windows上将代码清单1-11编译生成的helloworldvs.exe复制到Ubuntu机器上,使用Mono执行,效果如图1-15所示。

026-01

图1-15 在Ubuntu上执行Windows上生成的.NET程序