在当今的软件开发领域,跨平台技术的重要性日益凸显。微软的.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,请按照以下链接进行操作:
这些是常见的安装程序,它们会在机器上安装.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图形引擎。将向展示的是:
在这个阶段,可以很容易地使用命令行创建一个项目(由一个Json文件定义)。正如前面提到的,未来将支持众所周知的Visual Studio项目格式,并且会添加更多的创建选项(也有手动选项,但是...)。
要创建一个简单的'Hello World'应用程序,请按照以下步骤操作:
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机器上的列表是一件有趣的事情。)