首页 > 其他分享 >将 SmartAssembly 与单文件可执行文件一起使用 (.NET Core 6)

将 SmartAssembly 与单文件可执行文件一起使用 (.NET Core 6)

时间:2023-06-27 12:11:24浏览次数:45  
标签:Core ConsoleApp 文件 win x64 应用程序 SmartAssembly Release NET

.NET Core 6引入了创建单文件可执行文件的功能。这只允许分发一个应用程序文件,因为所有配置和依赖项都包含在二进制文件本身中。

该功能为依赖项嵌入提供了一种本机方法,这在发布生成数百个程序集的独立应用程序时最有益。它可用于依赖于框架或自包含的应用程序,但在这两种情况下都需要设置运行时标识符以针对特定环境和位数。

开始

首先,让我们看看发布 .NET Core 应用程序的常规过程是什么样的。

假设我们有一个名为 ConsoleApp 的 .NET Core 6 应用程序,由以下项目文件定义:

  1. <Project Sdk="Microsoft.NET.Sdk">
  2. <PropertyGroup>
  3. <OutputType>Exe</OutputType>
  4. <TargetFramework>netcoreapp6</TargetFramework>
  5. </PropertyGroup>
  6. </Project>

要发布此应用程序,我们将使用以下命令:

  1. dotnet publish .\ConsoleApp.csproj -c Release -r win-x64

上面的命令将在“发布”模式下构建应用程序,然后发布为自包含并面向 Windows 64 位系统。所有依赖项(包括 .NET Core 框架程序集)和配置都将复制到已发布的目录中。

发布完成后,转到输出目录(对于上面的应用程序,这将是 \ConsoleApp\bin\Release\netcoreapp6\win-x64\publish\)。注意目录中存在多少个文件。

发布独立 .NET Core 应用程序的过程可以可视化如下:

使用单文件可执行文件

现在,让我们将应用程序发布为单个文件。我们需要做的就是添加一个值设置为 true 的 PublishSingleFile 属性。

  1. <Project Sdk="Microsoft.NET.Sdk">
  2. <PropertyGroup>
  3. <OutputType>Exe</OutputType>
  4. <TargetFramework>netcoreapp6</TargetFramework>
  5. <PublishSingleFile>true</PublishSingleFile> <!-- add this line -->
  6. </PropertyGroup>
  7. </Project>

让我们再次发出发布命令:

  1. dotnet publish .\ConsoleApp.csproj -c Release -r win-x64

完成此过程后,导航到已发布的目录(上述应用的 \ConsoleApp\bin\Release\netcoreapp6\win-x64\publish\)。您应该只看到 1 个.exe文件和一个 .pdb 文件(可选)。

让我们看看启用单文件后发布过程有何变化:

集成智能装配

对于最后一步,让我们在程序集捆绑到单文件可执行文件之前保护它。

SmartAssembly 将在生成应用程序之后执行,但在发布并捆绑到单个文件之前执行。如下图所示:

步骤 1:创建智能程序集项目

  1. 打开智能装配。
  2. 单击“新建项目”。
  3. 单击“浏览程序集”。
  4. 导航到应用程序的输出目录,选择适当的程序集(对于上面的应用程序,它将是:\ConsoleApp\bin\Release\netcoreapp6\win-x64\ConsoleApp.dll)并打开
  5. 单击设置目的地
  6. 导航到应用程序的 \obj\ 目录(对于上面的应用程序,它将是:\ConsoleApp\obj\Release\netcoreapp6\win-x64\ConsoleApp.dll)并保存。如果文件已存在,请单击“”进行覆盖。
  7. 根据需要配置项目。启用应用程序可能需要的任何保护。
  8. 单击保存以保存项目。建议将项目保存在与Visual Studio的项目文件相同的位置,名称相同(对于上面的应用,它将是:\ConsoleApp\ConsoleApp.saproj)。

保护单文件程序集时,不应使用“依赖项合并”和“依赖项嵌入”。合并或嵌入程序集可能会导致意外行为,不建议用于此类应用程序。

步骤 2:将智能程序集集成到发布过程中

  1. 在 Visual Studio 中打开应用程序的项目。
  2. 右键单击项目名称,然后选择“管理 NuGet 包...”
  3. 切换到浏览选项卡。
  4. 键入 RedGate.SmartAssembly.MSBuild,然后单击它旁边的安装

就是这样!执行上述步骤后,项目文件应如下所示:

  1. <Project Sdk="Microsoft.NET.Sdk">
  2. <PropertyGroup>
  3. <OutputType>Exe</OutputType>
  4. <TargetFramework>netcoreapp6</TargetFramework>
  5. <PublishSingleFile>true</PublishSingleFile>
  6. </PropertyGroup>
  7.  
  8. <ItemGroup>
  9. <PackageReference Include="RedGate.SmartAssembly.MSBuild" Version="8.1.2.4975">
  10. <PrivateAssets>all</PrivateAssets>
  11. <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  12. </PackageReference>
  13. </ItemGroup>
  14. </Project>

现在让我们再次发出发布命令:

  1. dotnet publish .\ConsoleApp.csproj -c Release -r win-x64

如果要运行同一项目的多个连续生成,则应在每次生成之前或之后清理项目。由于 SmartAssembly 将程序集模糊处理到 \obj\ 目录中,因此下次生成命令可能会选取经过模糊处理的版本,从而导致双重模糊处理和其他意外结果。

要清理项目,请手动删除 \obj\ 目录或发出以下命令(使用用于发布的相同配置和运行时标识符):

dotnet clean .\ConsoleApp.csproj -c Release -r win-x64

如果一切顺利,您应该会在命令行中看到其他输出消息,确认 SmartAssembly 已成功保护您的应用程序(为清楚起见,缩短了路径):

Microsoft (R) Build Engine version 16.5.0+d4cbfca49 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

Restore completed in 206.38 ms for C:\[..]\ConsoleApp\ConsoleApp.csproj.
ConsoleApp -> C:\[..]\ConsoleApp\bin\Release\netcoreapp6\win-x64\ConsoleApp.dll
Executing SmartAssembly from: C:\PROGRA~1\Red Gate\SmartAssembly 8\SmartAssembly.com
Using project: C:\[..]\ConsoleApp\ConsoleApp.saproj
SmartAssembly v8.1.2.4975 Personal
Copyright c Red Gate Software Ltd 2005-2020
Loading project C:\[..]\ConsoleApp\ConsoleApp.saproj
Input=C:\[..]\ConsoleApp\bin\Release\netcoreapp3.1\win-x64\ConsoleApp.dll
Loading...
Starting...
Analyzing...
Preparing...
Creating assembly...
Copying additional files...
OK

ConsoleApp -> C:\[..]\ConsoleApp\bin\Release\netcoreapp3.1\win-x64\publish\

标签:Core,ConsoleApp,文件,win,x64,应用程序,SmartAssembly,Release,NET
From: https://www.cnblogs.com/chaego/p/17508363.html

相关文章

  • Taurus .Net Core 微服务开源框架:Admin 插件【2】 - 系统环境信息管理
    前言:继上篇:Taurus.NetCore微服务开源框架:Admin插件【1】-微服务节点管理本篇继续介绍下一个内容:1、系统环境信息节点- OS-Environment界面 基本信息如上图,重点的几个参数:1、App-StartTime:应用程序启用时间,可以在更新程序或配置文件后,查看该时间,看应用程序是否更......
  • cnetos系统部署项目uwsgi正常启动查找不到进程
    主要原因是因为新买的服务器,参数配置没有更改1.解决方案,更改net.core.somaxconn的参数配置2.更改uwsgi参数配置net.core.somaxconn的作用net.core.somaxconn 是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。什么是backlog呢?backlog就是socket的监听......
  • NetBeans连接SQLServer2008配置
    一、配置SQLServer(一)SQLServer配置管理器1、打开SQLServer配置管理器  (1)文件路径,我的是C:\Windows\SysWOW64\mmc.exe,也可以从开始菜单找(如下图所示) ps网络资源:Windows10可能在菜单栏里找不到SQLserver的配置管理器,去路径:C:\Windows\system32,在该路径下找文件SQLSer......
  • Kubernetes 系列:Kubernetes 的安装(三)
    序前面介绍了k8s组件和对象的一些基本概念,了解了k8s具体是做什么的以及架构,那么接下来我们开始介绍怎么去安装k8s,这里我们以windows为例,其他平台可以参考Kubernetes官方文档,其实安装方式都是类似的。先决条件要在系统中安装Kubernetes,以下是一些需要特别注意的先决条件。软件......
  • Bertviz: 在Transformer模型中可视化注意力的工具(BERT,GPT-2,Albert,XLNet,RoBERTa,CTRL,etc
    BertVizBertViz是一个在Transformer模型中可视化注意力的工具,支持transformers库中的所有模型(BERT,GPT-2,XLNet,RoBERTa,XLM,CTRL等)。它扩展了LlionJones的Tensor2Tensor可视化工具和HuggingFace的transformers库。Blogpost:解构伯特,第2部分:视觉化注意的内部运作(第一部分不是先决......
  • rabbitmq在.net中的使用
    在.NET中使用RabbitMQ的步骤如下:安装RabbitMQ首先,您需要在系统上安装RabbitMQ。您可以从RabbitMQ官方网站下载适用于您所使用的操作系统的安装程序。如果您使用的是Windows操作系统,则可以从Microsoft官网下载安装程序。安装RabbitMQ客户端库 ......
  • Typora PicGo-Core gitee
    参考:(41条消息)Typora+PicGo-core插入图片自动上传,gitee,gitgub,sm.ms三种免费图床_jaymier的博客-CSDN博客(41条消息)Node.js下载安装及环境配置教程【超详细】_nodejs下载安装教程_WHF__的博客-CSDN博客1、安装Node.js下载|Node.js中文网(nodejs.cn)傻瓜式,直接下一步,可......
  • 基于前端Vue后端.NetCore Web后台管理系统通用开本框架采用前后端分离技术
    基于前端Vue后端.NetCoreWeb后台管理系统通用开本框架采用前后端分离技术,前端使用vue2.6.0,后端使用.netcore3.1,支持跨平台、多租户、支持MySQLSQLServerOracle多数据库,模块化设计,高性能,高颜值,不管是个人学习还是企业做项目都非常适合 原创文章,转载请说明出处,资料来源:http://im......
  • .net core使用channel消息队列
    .netcore使用channel消息队列背景最近做一个项目,连接了很多设备,需要保存设备的心跳数据,刚开始的做法是直接接收到设备的数据之后进行心跳数据的保存,但是随着设备多了起来,然后设备的使用时长不断的加大,对数据库的压力也比较大,所以想着优化一下。方案调研1.使用第三方中间件常......
  • .NETCore项目在Windows下构建Docker镜像并本地导出分发到CentOS系统下
    在Windows下使用Docker,我们选择DockerDesktop这个软件,非常方便。DockerDesktop介绍及安装DockerDesktop是适用于Mac、Linux或Windows环境的一键安装应用程序,使您能够构建和共享容器化应用程序和微服务。它提供了一个简单的GUI(图形用户界面),允许您直接从机器管理容器、应用程......