.NET Core 3应用生成原生可执行文件指南

在本文中,将探讨开发者如何为其应用程序生成原生可执行文件。将查看如何检查Visual Studio安装的组件、添加包含ILCompiler的NuGet仓库、将依赖项添加到项目中、编写应用程序代码以及生成程序的原生可执行文件。

尽管该功能并未集成在SDK中,但它为C#开发者提供了一种令人惊叹的方式,可以从.NET Core 3的原始.csproj文件生成机器可执行文件。在看来,如果希望以专业的方式分发软件,这是一个关键点(这就是方式 :))。在一本出色的书籍中发现了这个功能(没有忘记提及来源,供参考):

《使用.NET Core3和Visual Studio 2019开发多平台桌面应用程序》。有了这个工具,.NET Core 3在开发性能增强应用程序方面超越了Python、Node和Java等并发性(最后,C#几乎达到了C++的性能水平)。

工作原理:原理

.NET Core运行时用于生成托管项目的AOT(提前编译)映像。为此,伪编译器将MSIL程序转换为C++代码,并编译结果以生成应用程序的原生可执行文件(这就是为什么无论使用的是什么操作系统,都需要C++工具的原因)。

这个过程已经被它的主要开发者之一(微软的一位员工)Matt Warren非常详细地记录了下来。总之,编译器生成了一个真正的原生可执行文件,与IL汇编相比,后者是在运行时由JIT(即时编译器)编译成本地代码的。

应用领域

使用原生可执行文件提供的明显好处是性能的显著提升,无需安装框架。最适应使用原生格式的程序主要是桌面应用程序(服务、控制台或GUI),因为对于这类应用程序,本地计算的收益相当明显。

另一方面,对于Web应用程序(Web应用程序和API),由于它们使用的部署方式,收益并不那么明显。在Web服务器环境中,大多数情况下,框架已经安装在机器上,使用原生可执行文件的优势不太明显。

示例程序

示例程序使用.NET Core 3。让回顾一下开发者必须遵循的生成应用程序原生可执行文件的过程。

除了所需的.NET Core3框架(以及所有开发此框架所需的组件)之外,ILCompiler还需要设置C++桌面功能。以下是必须在Visual Studio上安装的C++功能:

一个专门的NuGet仓库包含了编译程序为真正的原生可执行文件所需的Microsoft.Dotnet.ILCompiler依赖项。这个仓库的URL是:

https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json

必须将其添加到NuGet源仓库中,如果使用Visual Studio,必须按照下图1所示的方式添加它。

可以通过选择可用软件包列表中的Microsoft.Dotnet.ILCompiler来添加它,如下面的图2所示。不要忘记勾选“包括预发布”复选框(因为该软件包仍然标记为“alpha”版本)。

示例控制台应用程序执行阶乘计算,并显示每个等级(计算的每一步)以及最终结果(很酷!)。以下是源代码:

C# using System; namespace Net3Factorial { class Program { static long Factorial(int x) { long result = 1; Console.ForegroundColor = ConsoleColor.Blue; for (int i = 1; i <= x; i++) { result = result * i; Console.WriteLine("\nStep {0}: {1}", i, result); } return result; } static void Main(string[] args) { Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Green; Console.Clear(); Console.WriteLine("\nEnter the Integer for the factorial calculation:"); int num = Convert.ToInt32(Console.ReadLine()); long f = Factorial(num); Console.ForegroundColor = ConsoleColor.Red; Console.Write("\nThe Factorial of {0} is: {1}\n", num, f); } } }

一旦项目已经调试和测试完毕,现在想要生成应用程序的原生可执行文件。.csproj文件必须包括生成原生可执行文件的目标平台,即运行时标识符(rid)。

<runtimeidentifier>win-x64</runtimeidentifier>

如果使用Visual Studio2019,可以使用“发布”命令(项目项的上下文菜单)来生成原生可执行文件,如下图所示3。

也可以使用CLI命令dotnet publish,如果更喜欢命令行。

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