使用Eazfuscator合并程序集的方法及嵌入DLL后仍留存于bin目录的问题咨询
使用Eazfuscator合并程序集的方法及嵌入DLL后仍留存于bin目录的问题咨询
嘿,我来帮你捋清楚这个问题~
首先得给你吃个定心丸:你看到bin目录里还留着assembly1.dll和assembly2.dll其实是正常现象,Eazfuscator的embed assembly特性本身只负责把指定DLL嵌入到主程序集(也就是你的Project.exe)里,它并不会自动帮你清理输出目录里的原DLL文件。
接下来咱们一步步排查和解决:
先确认嵌入是否真的生效
你可以用反编译工具(比如dnSpy)打开混淆后的Project.exe,查看它的模块列表,如果能找到assembly1.dll和assembly2.dll对应的嵌入模块,就说明你的配置是生效的,原文件留在bin里只是没被清理而已。
解决DLL留存的两种办法
1. 手动清理(临时方案)
每次编译混淆完成后,直接手动删除bin目录里的这两个DLL就行,适合偶尔编译的场景。
2. 自动清理(推荐方案)
在项目的构建事件里添加自动删除命令,一劳永逸:
- 右键你的项目 → 属性 → 生成事件 → 后期生成事件命令行
- 输入以下命令:
不用担心顺序问题,VS的构建流程默认是先完成编译复制DLL,再执行Eazfuscator的混淆操作,最后才跑后期构建事件,所以不会出现还没嵌入就删掉DLL的错误。del "$(TargetDir)assembly1.dll" "$(TargetDir)assembly2.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




