You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Eazfuscator合并程序集的方法及嵌入DLL后仍留存于bin目录的问题咨询

使用Eazfuscator合并程序集的方法及嵌入DLL后仍留存于bin目录的问题咨询

嘿,我来帮你捋清楚这个问题~

首先得给你吃个定心丸:你看到bin目录里还留着assembly1.dllassembly2.dll其实是正常现象,Eazfuscator的embed assembly特性本身只负责把指定DLL嵌入到主程序集(也就是你的Project.exe)里,它并不会自动帮你清理输出目录里的原DLL文件。

接下来咱们一步步排查和解决:

先确认嵌入是否真的生效

你可以用反编译工具(比如dnSpy)打开混淆后的Project.exe,查看它的模块列表,如果能找到assembly1.dllassembly2.dll对应的嵌入模块,就说明你的配置是生效的,原文件留在bin里只是没被清理而已。

解决DLL留存的两种办法

1. 手动清理(临时方案)

每次编译混淆完成后,直接手动删除bin目录里的这两个DLL就行,适合偶尔编译的场景。

2. 自动清理(推荐方案)

在项目的构建事件里添加自动删除命令,一劳永逸:

  • 右键你的项目 → 属性 → 生成事件 → 后期生成事件命令行
  • 输入以下命令:
    del "$(TargetDir)assembly1.dll" "$(TargetDir)assembly2.dll"
    
    不用担心顺序问题,VS的构建流程默认是先完成编译复制DLL,再执行Eazfuscator的混淆操作,最后才跑后期构建事件,所以不会出现还没嵌入就删掉DLL的错误。

再核对下你的配置是否正确

你的ObfuscationSettings.cs配置是完全没问题的:

using System.Reflection;
[assembly: Obfuscation(Feature = "embed assembly1.dll", Exclude = false)]
[assembly: Obfuscation(Feature = "embed assembly2.dll", Exclude = false)]
[assembly: Obfuscation(Feature = "encrypt symbol names with password password1", Exclude = false)]

而且从你贴的输出日志来看,Eazfuscator已经顺利完成了混淆操作,这部分不用调整。

另外补充个小细节:如果你的项目里对这两个DLL的引用设置了Copy Local = True,VS在构建时会先把DLL复制到bin目录,之后Eazfuscator才会执行嵌入操作,这也是原文件留存的直接原因,用后期构建事件删除是最直接的解决办法。

内容来源于stack exchange

火山引擎 最新活动