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

目录

简介:托管代码的编译?

工作原理:原理

应用领域

样例程序

1.检查Visual Studio安装的组件

2.添加具有ILCompiler的NuGet存储库

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

4.为您的应用程序编码

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

结论


在本文中,我们将看到一个使用.NET Core 3的示例程序。我们将回顾开发人员为生成其应用程序的本地可执行文件而必须遵循的过程。我们将看一下如何检查Visual Studio已安装的组件,添加具有ILCompilerNuGet存储库,将依赖项添加到您的项目,编写应用程序并生成程序的本地可执行文件。

简介:托管代码的编译?

该功能未集成在SDK中,但为C#开发人员提供了一种从.NET Core 3原始.csproj生成机器可执行文件的惊人方法。从我的观点来看,这是您要以专业方式分发软件(这是一种方式:)的关键点。我在一本出色的书中发现了此功能(我不忘提供源代码以供参考):使用.NET Core 3Visual Studio 2019开发多平台桌面应用程序。

借助此工具,.NET Core 3与并发(PythonNodeJava)的性能匹配,从而提高了性能增强的应用程序的开发(最后,C#几乎达到了C ++性能级别)。

工作原理:原理

.NET Core运行时用于生成托管项目的AOT(提前)图像。为了构建该代码,伪编译器将MSIL程序转换为C ++代码,并编译结果以生成应用程序的本地可执行文件(这就是无论您使用哪种OS都需要C ++工具的原因)。它的主要开发人员之一(Microsoft的伙计)Matt Warren 已很好地记录了此完整过程

为了恢复,编译器生成一个真正的本地可执行文件,而IL程序集在运行时由JITJust In Time编译器)编译成本地代码。

应用领域

通过使用本地可执行文件提供的明显好处是可笑的性能改进,缺少安装框架。

最适合使用本地格式的程序主要是台式机应用程序(服务,控制台或GUI),因为对于这种类型的应用程序,本地计算的收益非常明显。

另一方面,对于Web应用程序(Web应用程序和API),由于使用的部署类型不同,收益并不那么明显。在Web服务器环境中,大多数情况下,该框架已安装在计算机上,使用本地可执行文件的方式不那么明显。

样例程序

该示例程序使用.NET Core3。让我们回顾一下开发人员为制作其应用程序的本地可执行文件而必须遵循的过程。

1.检查Visual Studio安装的组件

ILCompiler添加到必需的.NET Core 3框架(以及使用该框架进行开发所需的所有组件)后,需要设置C ++桌面功能。

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

2.添加具有ILCompilerNuGet存储库

专用的NuGet存储库包含将程序编译为真正的本地可执行文件所需的Microsoft.Dotnet.ILCompiler依赖关系。
该存储库URL为:
https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json

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

图片1

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

您可以通过如图2所示在可用软件包列表中选择Microsoft.Dotnet.ILCompiler来添加。不要忘记选中包括预发行版本框(因为该软件包仍标有alpha版本)。

图片2

4.为您的应用程序编码

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

这是源代码:

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上使用,但在LinuxMac OS X上也可以使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Core 3.1 项目用 Docker 打包并部署的步骤如下: 1. 在项目根目录下创建一个 Dockerfile 文件,文件内容如下: ``` FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env WORKDIR /app # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ RUN dotnet publish -c Release -o out # Build runtime image FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "YourProject.dll"] ``` 其中,第一行指定了基础镜像为 .NET Core SDK 3.1,第二行指定了工作目录为 /app。接下来,将项目的 csproj 文件复制到容器中,并执行 dotnet restore 命令安装项目依赖。然后,将整个项目复制到容器中,并执行 dotnet publish 命令将项目编译成可执行文件。最后,指定基础镜像为 .NET Core 3.1 运行时,将编译好的可执行文件复制到容器中,并指定入口点为 YourProject.dll。 2. 在项目根目录下执行以下命令,将项目打包成 Docker 镜像: ``` docker build -t your-image-name . ``` 其中,your-image-name 为自定义的镜像名称。 3. 将镜像上传到 Docker Hub 或私有镜像仓库: ``` docker push your-image-name ``` 4. 在目标服务器上安装 Docker,并从 Docker Hub 或私有镜像仓库中拉取镜像: ``` docker pull your-image-name ``` 5. 运行容器: ``` docker run -d -p 80:80 your-image-name ``` 其中,-d 表示容器在后台运行,-p 表示将容器的 80 端口映射到主机的 80 端口,your-image-name 为之前打包的镜像名称。 至此,.NET Core 3.1 项目已经成功打包并部署到 Docker 容器中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值