c# 使用dotfuscator编译时自动混淆命令

系统搜索 dotfuscator 打开,vs2022默认已经安装了,首次使用可能要同意注册什么的。

rem 请使用VS2012自带的混淆版本,VS2010自带的有问题,而且每次弹出需要手动点击,费时费力

"C:\Program Files (x86)\PreEmptive Solutions\Dotfuscator Professional Edition 4.9\dotfuscator.exe" /q /in:"$(TargetPath)" /out:"$(ProjectDir)bin\Debug"

 VS 2022 无法直接覆盖,使用命令:

"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscator.exe" /q /in:"$(TargetPath)" /out:"$(ProjectDir)bin\Debug\Dotfuscated"

然后用copy代码覆盖

copy /y "$(ProjectDir)bin\Debug\Dotfuscated\$(TargetFileName)" "$(TargetPath)"

 为了实现高效工作不至于每次都混淆,Debug是作为编码模式,Release作为发布模式,只有Release模式下才混淆,配置编译后事件,有如下代码:

if not "$(ConfigurationName)" == "Release" (exit)
"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\PreEmptiveSolutions\DotfuscatorCE\dotfuscator.exe" /q /in:"$(TargetPath)" /out:"$(ProjectDir)bin\$(ConfigurationName)\Dotfuscated"
copy /y "$(ProjectDir)bin\$(ConfigurationName)\Dotfuscated\$(TargetFileName)" "$(TargetPath)"

 我发现我现在vs2022 路径是 C:\Program Files (x86)\Microsoft Visual Studio 10.0\PreEmptive Solutions\Dotfuscator Community Edition,替换即可。

如果项目技术复杂,混淆后部分功能可能会出现问题,大多因为是静态字符串绑定的属性或方法,运行时是通过反射来进行调用的,有以下两个方法:

1.对于不想被混淆的类型名和成员名,在类上面加上[Serializable],该类型将不会被混淆
2.加上[Serializable]并不能保证方法名不被混淆,可使用 [WebMethod] 来标记不想被混淆的方法名
以上两项也需要勾选,貌似是默认勾选的,见下图:

 

posted on 2022-01-25 11:45  空明流光  阅读(1084)  评论(0编辑  收藏  举报

导航