You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 VB.NET WinForms应用经Obfuscar混淆后无法保存设置求助

解决Obfuscar混淆VB.NET WinForms应用后My.Settings属性找不到的问题

使用VB.NET开发.NET 8 WinForms应用,配置了用户级应用设置,未混淆时正常运行。使用Obfuscar 2.2.41按指定配置混淆后,执行My.Settings.regCheckForUpdatesAtStartup = False和My.Settings.Save()时出现错误:未找到设置属性'regCheckForUpdatesAtStartup'。

问题根源

Obfuscar配置中开启了RenameProperties=true,而VB.NET的My.Settings对应的自动生成设置类(如My.MySettings)的属性被混淆重命名,导致运行时通过名称绑定访问属性失败。

解决方案

方案1:跳过所有Settings相关类型的混淆

修改Obfuscar配置文件,在<Module>节点下添加针对Settings类型的跳过规则,确保设置类的属性、方法等不被混淆:

<Module file="$(InPath)\WinFormsApp1.dll">
  <SkipType name="*Settings*" skipProperties="true" skipMethods="true" skipFields="true" skipEvents="true" skipStringHiding="true" />
  <SkipType name="*AnonymousType*" skipProperties="true" skipMethods="true" skipFields="true" skipEvents="true" skipStringHiding="true" />
</Module>

该规则会匹配所有名称包含Settings的类型,完全跳过它们的混淆处理,避免设置属性被重命名。

方案2:精准保留指定的设置属性

如果不想跳过整个Settings类型,可通过<Keep>节点单独保留需要访问的设置属性名称:

<Module file="$(InPath)\WinFormsApp1.dll">
  <!-- 保留特定设置属性 -->
  <Keep name="*Settings*::regCheckForUpdatesAtStartup" />
  <!-- 若有其他需要保留的设置属性,重复添加<Keep>节点 -->
  <SkipType name="*AnonymousType*" skipProperties="true" skipMethods="true" skipFields="true" skipEvents="true" skipStringHiding="true" />
</Module>

这种方式只保留指定的属性名称,其他非设置类的属性仍会被混淆,平衡混淆程度和功能正常性。

方案3:关闭属性重命名(不推荐)

若无需混淆任何属性,可将配置中的RenameProperties值改为false,但此方法会大幅降低代码混淆强度,仅在特殊场景下使用:

<Var name="RenameProperties" value="false" />

验证步骤

  1. 修改Obfuscar配置文件后,重新执行混淆操作
  2. 运行混淆后的应用,测试My.Settings.regCheckForUpdatesAtStartup = False和My.Settings.Save()功能是否恢复正常

内容的提问来源于stack exchange,提问作者Ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:35:01