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] 来标记不想被混淆的方法名
以上两项也需要勾选,貌似是默认勾选的,见下图:
桂棹兮兰桨,击空明兮溯流光。