.net8,全网首发:部署为自带环境的前后端分离项目,编译成二进制机器码,防止反编译

news/2024/7/7 21:29:26/文章来源:https://www.cnblogs.com/daxiongblog/p/18276169

环境:win10+.net8+vs2022+vue3(history路由模式)本文只演示在winows上面的部署
目的:
1.防止反编译,增加破解成本
2.更便捷的部署方式,开箱即用
实现:
1.不依赖容器,包括IIS,apache,docker,nginx等
2.更少的文件,所有dll逻辑打包成一个exe文件(如果是win环境是exe,不同环境不一样)
3.编译为二进制机器码,防止反编译
4.在windows上,作为windows服务运行。开机自启动

一、代码支持

首先,禁止使用 GetCurrentDirectory 来获取资源路径,使用AppContext.BaseDirectory代替,因为如果做成windows服务,前者获取出来的路径会是win32目录下,我们也要习惯于使用AppContext.BaseDirectory或者 env.ContentRootPath来获取项目目录,而不是 GetCurrentDirectory
其次,关于代码,需要对单文件部署不支持的方法进行过滤和修改,请检查项目中是否有使用这些方法,目前不支持的方法如下:

//禁止使用的方法
Assembly.CodeBase	//引发 PlatformNotSupportedException。
Assembly.EscapedCodeBase	//引发 PlatformNotSupportedException。
Assembly.GetFile	//引发 IOException。
Assembly.GetFiles	//引发 IOException。
Assembly.Location	//返回空字符串。
AssemblyName.CodeBase	//返回 null。
AssemblyName.EscapedCodeBase	//返回 null。
Module.FullyQualifiedName	//返回值为 <Unknown> 的字符串,或引发异常。
Marshal.GetHINSTANCE	//返回 -1。
Module.Name	返回值为 <Unknown> //的字符串。

1.添加支持静态资源

//Kestrel url重写,此处是为了支持vue histroy路由模式的 项目app.UseRewriter(new RewriteOptions().AddRewrite("^(?!api|swagger|assets).*", "index.html", skipRemainingRules: true));\\屏蔽以**开头的url,其他都重定向到index
//静态资源访问
app.UseStaticFiles();
app.UseDefaultFiles();

2.修改并支持windows服务安装

**main.cs**var builder = WebApplication.CreateBuilder(args);builder.Host.UseWindowsService();builder.Environment.ContentRootPath = AppContext.BaseDirectory;builder.Services.AddWindowsService();builder.Services.AddHostedService<WorkerService>();
** WorkerService.cs** 
namespace yourNamepece.Web
{public class WorkerService : BackgroundService{public WorkerService(ILoggerFactory loggerFactory){Logger = loggerFactory.CreateLogger<WorkerService>();}public ILogger Logger { get; }protected override async Task ExecuteAsync(CancellationToken stoppingToken){Logger.LogInformation($"{nameof(WorkerService)}is starting.");stoppingToken.Register(() => Logger.LogInformation($"{nameof(WorkerService)} is stopping."));while (!stoppingToken.IsCancellationRequested){Logger.LogInformation($"{nameof(WorkerService)} is doing background work.");await Task.Delay(TimeSpan.FromSeconds(60), stoppingToken);}Logger.LogInformation($"{nameof(WorkerService)} has stopped.");}}
}

二、项目发布

vs2022发布选项里面能够轻松的将项目打包成单文件形式,
1.部署模式选择 独立,选择后会将.net环境打包到发布文件中,目前版本大概130m左右,对于一个环境而言130m确实不算大
2.勾选生成单文件,会将所有依赖应用程序的文件捆绑到一个二进制文件中
3.勾选ReadyToRun后,应用程序集编译为 ReadyToRun (R2R) 格式来改进 .NET Core 应用程序的启动时间和延迟。 R2R 是一种预先 (AOT) 编译形式。,部分编译为AOT,运行速度会更快,但是文件会增大。如果不是特别需要可以不用勾选
4.关于裁剪选项,发布后可能会有问题,慎选

关于前端vue项目,打包后放在当前程序wwwroot文件夹下面即可

*** 三、项目部署***

直接通过 bat脚本安装服务

**安装服务.bat**chcp 65001set serviceName=你的exe文件名称,不包括.exe,将作为服务名称set serviceFilePath=%~dp0set serviceDescription=你的服务描述sc.exe create %serviceName%  BinPath=%serviceFilePath%%serviceName%.exesc.exe config %serviceName%    start=auto  sc.exe description %serviceName%  %serviceDescription%sc.exe start  %serviceName%pause
**卸载服务.bat**
set serviceName=服务名称
sc.exe stop   %serviceName% 
sc.exe delete %serviceName% 
pause

以上便完成了程序的发布和部署的步骤
有任何疑问和讨论都可以在下面评论或通过邮件联系我571115139@qq.com

奉上官方相关文档
单文件部署
ReadyToRun 编译
Kestrel的UrlRewrite
使用 BackgroundService 创建 Windows 服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/734121.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第7-8次大作业总结

前言: 第七次大作业: 这次大作业中新增了,两个新部件,一个是互斥开关,一个是受控窗帘,互斥开关意味着要用一个电器同时参与两条电路的构建,刚开始我没想好怎么去实现一个电器对两条支路,输出不同的状态,后来想到,不如直接把两个普通开关作为互斥开关的两个属性,把它…

配置自己的免费云主机,阿贝云,免费虚拟主机,免费云服务器

延期需要您在第三方网站发布使用感受,以下是对发布内容的详细要求: (1)比较推荐免费免费云主机,阿贝云,免费虚拟主机,免费云服务器 (2)“阿贝云”"免费虚拟主机"“免费云服务器”,配置使用比较方便简单,正在尝试更多功能,后续使用后再来继续发表 (3)可以…

OOP 7-8总结

oop 7~8总结 前言知识点 整体的知识点与前几次的题目没有太多的不同,每次迭代因为题目要求都有增加,所以会新增一些做法,但是像是继承、集合框架、正则表达式、抽象类、多态以及接口等知识点依然会重复使用,只是用法会不同。 越写到后面我越是意识到算法的重要性。在题目里…

家居强电电路模拟程序的两次迭代(包含最终版本)

目录: 一)前言 二)设计与分析 三)踩坑心得 四)改进建议 五)总结 (2)家居强电电路模拟程序-3: 【1】知识点:ArrayList的运用,物理知识的运用。 【2】题量:较大 【3】难度:较难 在家居强电电路模拟程序的迭代中引出较难的互斥开关 (3)家居强电电路模拟程序-4: 【1】…

免费的数据可视化(PCA、t-SNE和UMAP)网页程序

这是一款免费的数据可视化(PCA、t-SNE和UMAP)网页程序,直接进行在线操作,无需下载。这是一款免费的数据可视化网页程序,直接进行在线操作,无需下载。 URL: https://data-visualization-webapp-by-shuaibingli.streamlit.app/ 总体页面【预处理+可视化(PCA、t-SNE和UMAP)+保…

养老院视频监控智能分析系统

养老院视频监控智能分析系统为养老院提供先进的视频监控智能分析技术手段,构建养老智慧监控和安全智能分析防范体系,用科技手段弥补传统方法和技术在监管中的缺陷,变被动“监督”为主动“监控”。致力于打造智慧养老院,打造人性化托养、智能化运营管理,为各大养老机构减少…

关于nchu题目集7~8的总结

关于nchu题目集7~8的总结 一、前言 总结两次题目集的题目的知识点、题量、难度等情况 二、内容[题目[1]](##第三次题目(简略版)) [代码[2]](##我的代码) [设计与分析[3]](##设计与分析) [踩坑心得[4]](##踩坑心得) [改进建议[5]](##改进建议)题目集8最后一题(简略版)1、控制…

springboot+vue前后端分离项目-vue项目搭建5

1.改造登录vue/src/views/LoginView.vue,登陆后存储user信息到sessionStorage,进入到login页面移除sessionStorage里的user 2.改造vue/src/components/Header.vue,从sessionStorage中获取user,每个人登陆后根据个人信息显示名称 3.增加vue/src/views/Person.vue,点击个人信…

生产环境部署Nginx服务器双机热备部署-keepalived(多种模式教程)

前言:今天演示下生产环境keepalived的部署方式,安装模式有很多,比如说主备模型和双主模型,主备分:抢占模式 和 非抢占模式。这里我会一一展开说具体怎么配置 一、双节点均部署Nginx: 第一步:上传安装包到/usr/local/ 第二步:安装编译依赖(使用普通用户需要家sudo) yu…

无业游民写的最后一个.net有关项目框架

理想很丰满,现实往往很残酷。 一种按照ddd的方式,根据业务来把自己需要的模块一个一个写出来,再按照模块把需要的接口一个一个的写出来,堆砌一些中间件,以及解耦的command,handler等等 ,一个项目就这么成型了。上面的项目有一个非常清晰的特点,就是按需开发,不需要去可…

OOP第三次Blog

前言: (1) 第七次题集只有一道题目——家居强电电路模拟程序-3,这是第三次迭代,这次迭代主要的点有四个。 ​ 首先本次迭代添加了线路中存在多个串联起来的并联电路。不同于上次的单并联,本次更复杂。 ​ 然后本次还新迭代了一种控制器——互斥开关,互斥…

23201829OO第三次blog作业

OO第三次blog作业 前言 这次blog是本学期最后一次回顾总结,本次blog的范围是“家居强电电路模拟程序”的第三和第四次迭代,分别加入了互斥开关、窗帘的概念、多个串联起来的并联电路、串联电路中包含其他串联电路的情况和串联电路中包含串联电路的情况和二极管。因此这两次PT…

企业做账流程详解

都说会计月底很忙,那究竟都在忙什么呢,一起来看看吧

快速提取视频字幕!适用B站、AI字幕等等。好用

快速提取视频字幕!适用B站、AI字幕等等。好用 以B站为例: 视频教程:快速提取视频字幕!适用B站、AI字幕!非常好用_哔哩哔哩_bilibili 无论是视频的字幕,还是AI字幕,都可以提取。比较简单。 首先好像需要确定 视频的字幕还是AI字幕。如果是视频字幕,下面F12之后,输入的是…

Ymodem协议说明

Ymodem流程介绍1.Ymodem帧格式 Ymodem两种帧格式: 1024数据格式帧:名称 帧头 包号 包号反码 信息块 校验简写 SOH PN XPN DATA CRC字节数 1 1 1 128 2128数据格式帧:名称 帧头 包号 包号反码 信息块 校验简写 STX PN XPN DATA CRC字节数 1 1 1 1024 21.1 帧头 帧头一个有两…

CentOS7.9部署Nginx

简介 本章节主要讲的是在Linux系统CentOS7.9上去完成Nginx Web服务安装部署 步骤 1.配置 Nginx 源 2.yum 安装 Nginx 3.启动 Nginx 4.浏览默认站点 实施 1.配置 Nginx 源// 执行如下命令 rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el…

CF132E Bits of merry old England

传送门构图好题。郑哥的题解 每一个输出的位置看作先分配变量(赋值或者用前面的),再输出。 给每个位置拆三个点 \(v_{i,1/2/3}\)。\(v_{i,1}\) 的流入表示这个位置的 "空变量" 数量(包括有值但是我们选择让它不重复使用的变量);\(v_{i,2}\) 有流入表示分配好了…

opp7~8题目集的反思与总结

opp7~8题目集的反思与总结 1、前言: 这两个题目集都是对于电路题目的迭代,都是对于电路题目的应用,对于电路的题目集,在上次的opp的题目集中就已经简述过了,没有看过的可以点击链接查看(opp第二次blog) 在这个里面就是之前的opp的题目集,讲述了大致的内容,这个是基础,…

CentOS7.9部署.NET Core 8.0

简介 本章节主要讲的是在Linux系统CentOS7.9上去完成.NET Core 8.0软件的安装,确定Linux的版本是x64还是arm64的,然后到.NET Core的官网下载8.0的SDK,并进行安装 步骤 1.查看系统版本 2.打开.NET Core 8.0下载网址 3.下载与Linux系统对应版本的.NET Core SDK 4.上传.NET Cor…

使用世界变换的逆转置矩阵对法线进行变换

最近在做法向量变换的时候,踩了两个坑,记录一下相关的知识点法向量变换细节记录 最近在做法向量变换的时候,踩了两个坑,记录一下相关的知识点 法向量做变换,最后一位是补0 我们知道,顶点在做变换的时候最后一位是 1.0,法线最后一位是补0.0 vec3 normCurrent = (getMatri…