.Net 组件库先混淆签名,再打包成.nupkg包
目前,我们项目组打算做增量升级的功能,这涉及到dll库增量改变,只有修改过代码的dll才需要有文件的变化,否则文件和对应的版本是不会改变的。
我们之前的打包的项目有一个小缺陷:
在整个应用打包输出的时候,才对包文件进行 dll 和 exe 的混淆和签名。而且每一次的混淆和签名都会修改文件的属性如:MD5、CRC32的重要的文件属性进行校验。如果一个我们自己封装的Nuget包,版本号为:1.0.0.0.但是在A应用引用后,混淆、签名打包后,应用库的版本号还是1.0.0.0,但是文件的属性经过签名和混淆,已经变更了。所以在升级校验文件属性的时候,就会检测到MD5值已经改变了,就会执行下载更新。
解决方案
针对以上的问题,我们打算对自己开发的Nuget库包,在打包的时候,对生成的库先混淆、签名,再打包成.nupkg包
1、修改库工程文件的配置,取消 <GeneratePackageOnBuild>true</GeneratePackageOnBuild>的属性设置
我们之前在工程文件添加了 <GeneratePackageOnBuild>true</GeneratePackageOnBuild>,该属性是指定msbuild 在编译的同时,直接打包成.nupkg包。由于我们需要在编译完做混淆和签名的动作,所以需要把它去掉,手动打包处理

2、对工程文件进行编译,生成对应的库文件
dotnet build -c Release

3、调用 ObfuscarAutoConfigTool.exe ,对整个输出的库文件夹进行混淆
ObfuscarAutoConfigTool.exe E:\H3C\WindowsComponents\H3C.Windows.Core\H3C.Windows.Core\bin\Release
注意:
3.1、ObfuscarAutoConfigTool.exe 是我们组内为了方便开发和管理,基于Obfuscar 库开发的小工具,只对于未签名的文件进行混淆
obfuscar.xml 中需要 AssemblySearchPath 标签,因为所有需要的 DLL 都已经存在,但是在输出对于.netCore的版本,存在引用项不输出的情况,所以存在混淆报错的情况

3.2、所以需要库工程文件添加 <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> 属性,把依赖项都输出到库文件中

3.3、执行完显示Completed,说明混淆成功了

4、对编译输出的文件进行签名
wosigncodecmd sign /tp "指纹Key" /p pin码 /hide /isf /c /dig sha256 /tr http://timestamp.digicert.com /file E:\H3C\WindowsComponents\H3C.Windows.Core\H3C.Windows.Core\bin\Release/*.*
由于我们使用的沃通提供的签名,只需要调用厂家提供的 wosigncodecmd.exe 进行签名。其实也可以 使用微软提供的 dotnet nuget sign 的方式对 整个 .nupkg 签名,详情看:对 NuGet 包进行签名 | Microsoft Learn
签完名之后,对应的库文件的文件属性就有签名的属性了

5、对整个Rleease 文件 进行打包
dotnet pack --no-build -c Release
由于我们是对已经编译的文件进行打包,所以需要指定参数 --no-build 进行打包,防止之前混淆签名的库文件被重新编译替换了
打包完成之后,就会有.nupkg的nuget包了。

经过以上的操作,应用再引用该nuget包,再混淆打包,就会检测存在签名了,从而跳过该库文件,不进行 混淆和签名了。
参考文档:
使用Obfuscar对.NET项目进行混淆保护的实践-CSDN博客
对 NuGet 包进行签名 | Microsoft Learn
dotnet pack 命令 - .NET CLI | Microsoft Learn
Correct Usage for ASP.NET Core 2.0 · Issue #132 · obfuscar/obfuscar
.Net 组件库先混淆签名,再打包成.nupkg包的更多相关文章
- 【Android端】代码打包成jar包/aar形式
Android端代码打包成jar包和aar形式: 首先,jar包的形式和aar形式有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/d ...
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
(1)项目导入JAR包:1.在项目目录里建立一个libs目录,将外部jar包拷贝在里面.2.右键点击项目,Bulid Path->Configure Build Path3.在设置Libraie ...
- [Java] Java 打包成jar包 和 解压jar包
解压jar包 jar xf xxx.jar 打包成jar包 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] ...
- 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)
转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html 接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...
- Ubuntu下将现有的文件打包成deb包
转自:http://www.linuxidc.com/Linux/2008-04/12297.htm deb是Debian Linux的软件包格式.一般来说是需要通过编译源码然后制作deb包,今天由于 ...
- Android studio 将 Module 打包成 Jar 包
整理记录 AndroidStudio 把一个 module 项目打包成 jar 包. 一.默认自动生成的 jar 包 众所周知 android studio 会在library所依赖的 app运行 或 ...
- maven把项目打包成jar包后找不到velocity模板的bug
使用springmvc 开发时候要实现发送velcotiy模板邮件,在配置正常后,在本地测试正常后,使用maven打包成jar包后,报以下错误, Caused by: org.apache.veloc ...
- 【spring boot】6.idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...
- idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...
- 将java project打包成jar包,web project 打包成war包的几种演示 此博文包含图片
转: http://blog.csdn.net/christine_ruan/article/details/7491559 http://developer.51cto.com/art/200907 ...
随机推荐
- C# 网页截图全攻略:三种技术与 Chrome 路径查找指南
全局配置 string url = "https://blog.csdn.net/sunshineGGB/article/details/122316754"; 一.Puppete ...
- postman 如何比较两台电脑的脚本是否一样
- linux php重启
1.停止命令 你可以先查看自己的php进程有没有启动 ps -ef | grep php [root@iZ6we4yxap93y2r0clg3g8Z ~]# ps -ef | grep php roo ...
- Ubuntu上安装MySQL / MariaDB
目录 在Ubuntu上安装MySQL 更新Ubuntu 安装MySQL 安全的MySQL 优化MySQL(仅限高级用户) 如何在Ubuntu上安装MariaDB 更新Ubuntu 安装MariaDB ...
- 开源组件DockerFIle老是Build失败,如何解决
推荐把外网地址替换为国内高速镜像 # 替换源地址 http://dl-cdn.alpinelinux.org/alpine === https://mirrors.aliyun.com/alpine ...
- Linux下启动Oracle命令
1.进入LInux,切换到Oracle用户权限,输入数据库密码.su - oracle 1在这里插入图片描述2.输入sqlplus "/as sysdba" 1在这里插 ...
- 一个基于 .NET 开源免费的异地组网和内网穿透工具
前言 今天大姚给大家分享一个基于 .NET 开源免费的异地组网和内网穿透工具:linker. 工具介绍 linker是一个基于 .NET8 开源免费(GPL-2.0 license)的异地组网和内网穿 ...
- 【MathJax】语法总结
基础语法 1.显示公式 在行中显示的 (inline mode),就用 $...$ 单独一行显示 (display mode),则用 $$...$$ 2.希腊字母 要显示希腊字母,可以用 \alpha ...
- datasnap的监督功能【3】-TCP链接监督功能
1.对于使用TCP/IP链接的客户端应用程序,是具有状态的.一直等到客户端完成服务请求后释放配置的资源.如何掉线了,那么服务器就是傻傻地等着,可能导致资源耗尽. 如何在服务端选择一个链接切断关闭之: ...
- 外网pnpm安装的node_modules包迁移到内网环境提示node_modules will be removed and reinstalled from scratch.Proceed?
背景 由于内网没有所需的node包,于是在外网使用pnpm install安装后将node_modules复制到内网的项目目录下,内网执行pnpm install后提示node_modules wil ...