.NET Core跨平台开发初探

在当今的软件开发领域,跨平台技术的重要性日益凸显。微软的.NET Core正是在这样的背景下应运而生,它是一个跨平台、开源且模块化的.NET平台,适用于创建现代的Web应用、微服务、库以及控制台应用程序。作为一名开源和.NET的忠实粉丝,自.NET Core诞生之初就开始尝试使用它,并且对Mono和Xamarin也有所涉猎。本文将带领了解如何使用.NET Core进行跨平台开发

首先,需要明确.NET Core并非.NET Framework的重制版,而是一个全新的、与之并行的框架。它重新实现了.NET Framework中所有可以跨平台运行的部分,并且遵循.NET标准库(Standard ECMA-335)的指导原则,因此.NET Core与.NET Framework是兼容的。不过,由于用户界面(UI)高度依赖于平台和设备,.NET Core并没有实现原始框架中的UI相关库,因此.NET Core目前唯一支持的用户界面形式是控制台。但这恰恰使得它非常适合作为任何用户界面——无论是桌面还是Web——的后端库和服务,不受设备限制。

尽管.NET Core备受赞誉,但它仍然是一个新生事物,并不完美,与更成熟的.NET Framework相比,它可能在某些方面还不够平滑。然而,在看来,对于那些希望将.NET应用程序扩展到新目标的开发者来说,.NET Core无疑是一个巨大的机遇。

设置开发环境

为了体验.NET Core的魅力,创建了两台虚拟机——一台安装了Windows 7,另一台安装了Fedora 23。可以通过查看.NET Core运行时的“构建状态”表来了解哪些Linux版本是受支持的。

要在Windows上安装.NET Core,请按照以下链接进行操作:

  • x86版本:
  • x64版本:

这些是常见的安装程序,它们会在机器上安装.NET Core及其支持的SDK...

要检查安装是否成功,打开命令窗口并输入dotnet --version命令。如果安装成功,应该看到类似1.0.0-preview2-003121的版本号。

在Linux上安装可能会稍微复杂一些(这取决于使用的发行版),因此微软提供了一系列的页面来帮助:

选择发行版并按照页面上第一部分的说明进行操作。要确保有一定的Linux终端/安装/升级操作的理解,但只需要基本的...

要检查安装是否成功,需要在终端运行相同的命令:dotnet --version。如果安装成功,也应该看到相同的版本号。如果在这一步遇到错误,可能需要自己解决,但可以提供一个命令来帮助找到可能的问题:

find /opt/dotnet -name '*.so' -type f -print | xargs ldd | grep 'not found'

这个命令会列出所有缺失的库,可以运行适合发行版的安装/更新命令(/opt/dotnet路径是安装.NET Core包的位置——如果不同,请相应更改)。

推荐的编辑器

如果使用的是Windows,推荐使用Visual Studio(可能是2015社区版)。如果是一名硬核的Linux开发者,可能很难从最喜欢的编辑器(vim、emacs、gedit等)中转移出来,但对于介于两者之间的情况,想向介绍Visual Studio Code

Visual Studio Code是一个基于浏览器的(嵌入式)代码编辑器,它被封装在一个能够处理项目和扩展的包装器中,具有内置的调试平台、Git支持和智能感知功能。Visual Studio Code实际上是迈向跨平台Visual Studio的第一步(根据路线图,它将在下一个版本中支持标准的Visual Studio项目,而不是当前基于文件夹的工作区和json项目文件——预计在2016年第四季度/2017年第一季度发布)。它轻量级且简单,但在所有支持的平台上进行调试时却非常强大...

由于将向展示C#代码... Visual Studio Code默认只支持node.js、JavaScript和TypeScript,所以需要为此示例安装C#扩展... 使用文档查看如何安装。

作为一个非常有趣的补充,就像Visual Studio一样,也可以为Visual Studio Code编写扩展!现在就来尝试一下吧...

真正的魔法

这部分其实非常简单——并不是要重写一个3D图形引擎。将向展示的是:

  • 创建一个简单的控制台(Hello World)应用程序
  • 添加.NET中众所周知的Process类来打印加载的模块
  • 在Fedora机器上编译、运行——偶尔调试——它
  • 将编译好的程序集移动到Windows机器上并运行——原样运行

在这个阶段,可以很容易地使用命令行创建一个项目(由一个Json文件定义)。正如前面提到的,未来将支持众所周知的Visual Studio项目格式,并且会添加更多的创建选项(也有手动选项,但是...)。

要创建一个简单的'Hello World'应用程序,请按照以下步骤操作:

  • 打开Visual Studio Code
  • 打开内置终端(CTRL+`,或从视图菜单)
  • 运行以下命令:
mkdir hwapp cd hwapp dotnet new dotnet restore dotnet run

现在打开项目(Visual Studio Code使用基于文件夹的工作区,所以实际上需要打开包含文件夹的项目),使用文件/打开文件夹...菜单。

using System; using System.Diagnostics; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { Process oProcess = Process.GetCurrentProcess(); Console.WriteLine(String.Format("Process: {0} ({1})", oProcess.ProcessName, oProcess.Id)); Console.WriteLine(); Console.WriteLine("MODULES:"); Console.WriteLine("________"); foreach (ProcessModule oModule in oProcess.Modules) { Console.WriteLine(String.Format("\t{0} ({1})", oModule.ModuleName, oModule.FileName)); } } } }

正如承诺的那样,代码更改非常简单。但可能会注意到,没有任何东西表明它是.NET Core的代码。这段代码——原样——也可以在完全标记的.NET Framework下编译(提到过.NET Core与.NET Framework兼容吗?)。

还需要注意到编辑窗口顶部的通知——阅读并相应地做出反应,它们大多是关于缺失的东西,比如调试定义和错误...

要构建应用程序,可以再次使用终端(dotnet build)或预定义的构建任务,可以通过CTRL+SHIFT+B调用来构建。

此时,应用程序已准备好运行,可以使用调试器——看看它是如何工作的,内置终端或外部终端来运行它。要从终端运行它,导航到包含应用程序的文件夹并输入dotnet run。将得到一个由应用程序加载的模块列表...

无处不在的运行

现在到了这里。现在将把应用程序——编译后的版本——移动到Windows机器上,看看它在那里是如何运行的...

在Fedora(Linux)机器上,会在'bin\Debug\netcoreapp1.0'文件夹中找到二进制文件。需要复制的是DLL(是的!在.NET Core下,即使是控制台应用程序也会编译成DLL而不是EXE!)和'runtimeconfig.json'文件... 将两者都放入选择的Windows机器上的同一个文件夹中。

打开命令窗口并导航到存放二进制文件的文件夹。输入魔法命令dotnet run并享受吧!(比较Fedora(Linux)和Windows机器上的列表是一件有趣的事情。)

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485