65.9K
CodeProject 正在变化。 阅读更多。
Home

从 .NET Core 3.1 项目生成原生可执行文件

starIconstarIconstarIconstarIconstarIcon

5.00/5 (20投票s)

2020年3月16日

CPOL

4分钟阅读

viewsIcon

60595

downloadIcon

606

使用 CoreRT 库从 .NET Core 3.1 项目(阶乘计算项目示例)创建真正的原生可执行文件(无需框架)

本文将介绍一个使用 .NET Core 3 的示例程序。我们将回顾开发人员必须遵循的生成应用程序原生可执行文件的流程。我们将了解如何检查 Visual Studio 已安装的组件、添加包含 ILCompiler 的 NuGet 存储库、将依赖项添加到项目、编写应用程序代码以及生成程序的原生可执行文件。

简介:托管代码的编译?

此功能并未集成到 SDK 中,但它为 C# 开发人员提供了一种惊人的方法,可以从 .NET Core 3 原生的 .csproj 文件生成机器可执行文件。在我看来,当您想以专业的方式分发软件时,这是一个关键点(这就是方法 :)。我在一本优秀的书中发现了此功能(我没有忘记提及来源,以供参考)

使用 .NET Core 3 和 Visual Studio 2019 开发多平台桌面应用程序。

借助此工具,.NET Core 3 在性能增强型应用程序的开发方面超越了竞争对手(Python、Node、Java)(最后,C# 几乎达到了 C++ 的性能水平)。

工作原理:原理

.NET Core 运行时用于生成托管项目的 AOT(提前)映像。为此,伪编译器将 MSIL 程序转换为 C++ 代码,并编译结果以生成应用程序的原生可执行文件(这就是为什么无论您使用什么操作系统,都需要 C++ 工具)。
这个 完整的过程已由其主要开发人员之一(一位微软员工)Matt Warren 进行了很好的记录

总而言之,与在运行时由 JIT(即时编译器)编译为原生代码的 IL 程序集相比,编译器生成了真正的原生可执行文件。

应用领域

使用原生可执行文件带来的明显好处是性能的显著提升,以及无需安装框架。

最适合使用原生格式的程序主要是桌面应用程序(服务、控制台或 GUI),因为对于此类应用程序,本地计算的增益相当明显。

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

示例程序

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

1. 检查 Visual Studio 已安装的组件

除了所需的 .NET Core 3 框架(以及使用此框架进行开发所需的所有组件)之外,ILCompiler 还需要安装 C++ 桌面功能。

这是您必须在 Visual Studio 上安装的 C++ 功能

2. 添加包含 ILCompiler 的 NuGet 存储库

一个专用的 NuGet 存储库包含将程序编译成真正的原生可执行文件所需的 `Microsoft.Dotnet.ILCompiler` 依赖项。
此存储库 URL 为:
https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json.

如果您使用 Visual Studio,则必须将其添加到您的 NuGet 源存储库中,如下面的图片 1 所示。

Picture 1

3. 将依赖项添加到您的项目

您可以添加 `Microsoft.Dotnet.ILCompiler`,方法是在可用包列表中选择它,如图片 2 所示。请不要忘记选中“包含预发行版”复选框(因为该包仍然标有“alpha”版本)。

Picture 2

4. 编写您的应用程序

示例控制台应用程序进行阶乘计算,显示每个等级(计算的每个步骤)并以红色显示最终结果(很酷!)。

这是源代码

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("Step {0}: {1}", i, result);
            }
            return result;
        }

        static void Main(string[] args)
        {
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Clear();

            Console.WriteLine("Enter the Integer for the factorial calculation:");

            int num = Convert.ToInt32(Console.ReadLine());
       
            long f = Factorial(num);
            Console.ForegroundColor = ConsoleColor.Red;

            Console.Write("The Factorial of {0} is: {1}\n", num, f);
        }
    }
}

5. 生成程序的原生可执行文件

调试和测试项目后,您现在想要生成应用程序的原生可执行文件。.csproj 文件必须包含用于生成原生可执行文件的目标平台和运行时标识符 (RID)。

    <runtimeidentifier>win-x64</runtimeidentifier>

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

图 3

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

结论

生成原生可执行文件是 .NET Core 3 的一个重要优势,您可以从 C# 的高生产率中受益,并且性能几乎与使用经典 C++ 可以实现的性能一样好。

本文中描述的 `ILCompiler` 库可在 Windows 上使用,也可在 Linux 和 Mac OS X 上使用。

历史

  • 2020年3月16日:初始版本
© . All rights reserved.