在本文中,将探讨开发者如何为其应用程序生成原生可执行文件。将查看如何检查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
,如果更喜欢命令行。