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

这篇具有很好参考价值的文章主要介绍了将 SmartAssembly 与单文件可执行文件一起使用 (.NET Core 6)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

.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\文章来源地址https://www.toymoban.com/news/detail-502091.html

到了这里,关于将 SmartAssembly 与单文件可执行文件一起使用 (.NET Core 6)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年04月12日
    浏览(52)
  • 2步轻松实现ASP.NET Core托管服务执行定时任务

    最近接到一个新项目,需要在项目里添加一个后台任务,定时去发邮件通知客户;由于是一个比较小型的项目,不希望引入Quartz.Net、Hangfire等太重的框架,同时也没持久化要;寻觅了一下发现ASP.NET Core本身带有托管服务,可以执行定时任务。ASP.NET Core提供了IHostedService接口,

    2024年02月06日
    浏览(47)
  • 在Linux平台下使用.NET Core访问Access数据库读取mdb文件数据

    今天有群友在群里问 C# 能不能在 Linux 下访问 Access数据库 ? 我觉得这很有趣,因此研究折腾了一下,也因为很久没有写博文了,所以特意上来写博文分享经验。 操作系统: Ubuntu 22.04.3 LTS (Jammy) 开发工具: Visual Studio 2022 (17.8.0) 运行时版本: .NET Runtime 8.0 依赖库: unixodbc 、

    2024年02月05日
    浏览(42)
  • ASP.NET Core如何知道一个请求执行了哪些中间件?

    需要添加两个Nuget包分别是: Microsoft.AspNetCore.MiddlewareAnalysis 和 Microsoft.Extensions.DiagnosticAdapter ,前者是分析记录中间件核心代码实现后者是用来接收日志输出的,由于是用的DiagnosticSource方式记录日志,所以需要使用DiagnosticListener对象的SubscribeWithAdapter方法来订阅。 这个适配器

    2023年04月09日
    浏览(69)
  • .net core使用Html模板转PDF文件并下载的业务类封装_基于DinkToPdf_跨平台_windows+linux

    前言:我这里文件下载的模板选型优先考虑html模板,上手容易,前后端通用,有了模板后就需要有转换了,html转PDF采用第三方包:DinkToPdf(1.0.8),下面是代码核心类:   重点:html转PDF的三方包有很多,我目前采用的是支持跨平台(windows和linux)的包源:DinkToPdf,这里提一嘴

    2024年02月09日
    浏览(67)
  • .Net Core 读取配置文件

    目录 appsetting.json IConfiguration 读取 IConfiguration Bind 读取 IOptionsMonitor 读取 Program.cs 构造注入 使用 IOptions 读取 Program.cs 构造注入 使用 用于测试appsetting.json 直接构造函数注入 使用Bind方法与对象绑定,然后操作对象即可, 注意: 对象属性与配置文件节点相同 Program.cs 读取要读取的节

    2024年02月17日
    浏览(47)
  • defineProps和立即执行函数不能一起使用的问题

    最近在开发的时候碰到一个很有意思的现象,在一个组件内,我需要定义props,使用方式如下: 本来这里是没有任何问题的,但是问题出在后面的代码里,我们知道Vue3的组合式API生命周期是不存在 created 相关的钩子函数的,如果我们希望在dom实例挂载之前做一些操作,例如请

    2023年04月09日
    浏览(41)
  • .net core 上传文件大小限制

    微软官网文档中给的解释是.net core 默认上传文件大小限制是30M,所以即便你项目里没有限制,这里也有个默认限制。 官网链接地址 总结了一下解决办法: 1.首先项目里添加一个web.config自定义配置文件 在配置文件中加上这段配置 !--//上传文件大小限制IIS设置 256M --   system.

    2024年02月09日
    浏览(59)
  • .NET Core WebAPI 基础 文件上传

    昨天分享了一个在WebApi中如何接收参数的文章 传送门,然后有新人小伙伴就问了,那文件上传呢,这个怎么弄,借此我写了一个小demo,分享给大家。 通常来说,上传文件,我们是使用POST,还是老规矩先上代码: 这是需要上传的txt文件。 这里有一个需要注意的地方,就是上

    2024年02月11日
    浏览(35)
  • .NET Core MVC基础之返回文件类型

    上一篇文章讲了基础的返回类型,这篇文章讲解如何返回文件类型给浏览器下载。 系列文章 .NET MVC基础之页面传值方式 通过图片流来返回图片 在返回文件之前,要知道MIME 类型,这里介绍常用的几种: text/plain :纯文本文件 text/html :HTML 文件 text/css :CSS 文件 application/jso

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包