返回 登录
4

如何利用.NET Core搭建跨平台的控制台应用程序

原文:How to build cross-platform console apps with .NET Core
作者: Alistair Chapman
翻译:雨言

译者注:.NET Core是.NET Framework的新一代版本,是微软开发的第一个官方版本,也是微软在一开始发展时就开源的软件平台,具备有跨平台 (Windows、Mac OSX、Linux) 能力的应用程序开发框架 (Application Framework),未来还将支持 FreeBSD 与 Alpine 平台。本文介绍了如何利用.NET Core搭建跨平台的控制台应用程序,主要包括搭建新程序、添加逻辑功能和运行新程序三个步骤。

尽管传统意义上来说,.NET是只面向Windows的、闭源的专有平台,然而,传统观念即将被颠覆。新的开源跨平台的.NET Core正式开启,意味着你可以在任意平台写C#或.NET,然后在Windows、Linus和macOS运行

这个新的.NET平台正在GitHub上尝试对外开放,主要用到MIT和Apache的许可证,甚至还接收社区贡献。新平台的设计理念源自以往的开源编译器Roslyn(.NET编译器平台),目的在于不局限于Windows或Visual Studio,而是允许开发者在任意集成开发环境(IDE)中使用任意系统,然后在任意服务器或平台运行程序。

为了演示这个新平台,我们搭建一个超级简单的控制台应用程序,然后使用新的dotnet命令行接口(CLI)在Windows和Linux上运行。开始之前,需要先安装.NET Core(包含dotnet CLI工具)。微软的在线文档中为大多数平台(包括各种各样的发行版)提供完整的软件文档。

如果你不想在本地安装.NET Core,微软/dotnet:最新Docker图片预置了所有最新的工具和SDK。

搭建新程序

.NET Core版本迭代很快,我写的这些主要适用于当时的最新版本。

首先,我们用dotnet的新控制台搭建一个新的控制台应用程序,然后自动生成一个Program.cs和 .csproj,这是以当前的目录命名的(我的名为app.csproj)。

为了验证可行性,尝试运行一下dotnet restore,这个可以恢复运行程序需要用到的所有包。这个步骤完成后,运行dotnet run,然后你就可以在控制台看到关键信息Hello,World!了。

添加逻辑功能

在你最喜欢的文本编辑器中打开Program.cs,然后用下面的内容替换Console.WriteLine(“Hello World!”);,因为.NET与Visual Studio之间没有耦合关系,所以你可以用任意你喜欢的IDE或文本编辑器,甚至可以用vi。

Console.WriteLine($"Hello
{System.Environment.GetEnvironmentVariable("USER")}! 
I'm {System.Environment.MachineName} and I'm talking 
to you from 
{System.IO.Directory.GetCurrentDirectory()}");

对于不熟悉C#和.NET的人来说,这段代码实际上是在用当前环境的信息打印一个更详细版的经典Hello, World。注意,这里的代码并不是针对某一个指定的平台。

运行新程序

如果你现在运行dotnet build,你会得到一个.dll文件,还会有其他文件添加到你的./bin/Debug文件夹。你已经写了一段跨平台的控制台程序,将那些文件复制到另一台运行.NET Core的机器——Linux或者OS X也可以,然后运行dotnet ./path/to/your/app.dll,你将看到和前面一样的输出,然而你用的仍然是本地运行环境。幸运的是,.NET Core可以在一个独立包中搭建和发布本地二进制文件,所以你的目标系统(或用户)不用安装.NET也可以运行程序。

尝试其他平台

要想尝试跨平台应用程序,我们必须先确定用于搭建平台的.NET Core SDK,由于这个过程涉及到本地库,除了指明需要用到的平台以外,还需要确定风格和版本。

在应用目录中打开.csproj文件,将下列XML标签添加到各标签中:

<propertygroup><runtimeidentifiers>win10-x64;osx.10.12-
x64;debian.8-x64</runtimeidentifiers></propertygroup>

这样,.NET就知道我们想要为Windows 10 64-bit、macOS Sierra和Debian 8搭建一个独立的应用程序,接下来要做的就是运行之前选择的环境下的dotnet publish,然后在每一个平台上编译本地二进制文件。

注意一下,在./app/bin/Debug/netcoreapp1.1/文件夹中每一个平台都有对应的目录,每一个目录都有对应的publish文件夹,这个文件夹里有你的本地应用程序的副本,还有所有需要运行的.NET库的副本,所有没必要在目标系统上安装.NET,只需要把这些文件复制到一个新的文件夹然后运行可执行文件就好了。

结语

使用C#和新的.NET Core平台,你可以在任意平台搭建应用程序,再将它发布到任意平台——100%代码复用、完全本地、无运行时、不用安装框架。来GitHub吧,你可以看到新的框架让这项技术更加强大!不管对于C#还是.NET,这都是非常激动人心的时刻!

评论