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

Obfuscar混淆后自定义控件TypeName被混淆的解决问询

自定义控件TypeName被Obfuscar混淆的解决方法

在VB.Net应用程序AppliTest里用了自定义用户控件PlusMinus,程序逻辑依赖控件的TypeName判断处理逻辑。混淆前TypeName显示正常,比如c.Name=PM_Large c.Type=PlusMinus;但用Obfuscar混淆后,控件实例名称没问题,TypeName却被改成了类似“뢕”的乱码字符,Label、TextBox这类系统控件不会出现这个问题。

当前使用的Obfuscar配置如下:

SkipType name="AppliTest .PlusMinus"
Var name = "KeepPublicApi" value="false"
Var name = "HidePrivateApi" value="true"
Var name = "RenameProperties" value="true"
Var name = "RenameFields" value="true"
Var name = "UseUnicodeNames" value="true"
Var name = "HideStrings" value="true"
Var name = "OptimizeMethods" value="true"
Var name = "ReuseNames" value="true"
Var name = "UseKoreanNames" value="true"

几种可行的解决方案

1. 修正SkipType并添加针对性的KeepName规则

首先你的SkipType配置里类名多了个空格(AppliTest .PlusMinus),这会导致规则不生效,先去掉空格。然后添加规则保留TypeName相关的成员:

<!-- 修正类名空格,确保匹配到目标控件 -->
SkipType name="AppliTest.PlusMinus"
<!-- 保留TypeName属性 -->
KeepName type="AppliTest.PlusMinus" name="TypeName"
<!-- 如果代码里是通过GetType().Name获取类型名,还需要保留类型的Name属性 getter -->
KeepName type="AppliTest.PlusMinus" name="get_Name"

2. 调整全局混淆参数(适合需要保留大量公共类型的场景)

把KeepPublicApi改成true,这样公共类型的名称不会被混淆,但会降低整体混淆强度:

Var name = "KeepPublicApi" value="true"

3. 代码层面绕过TypeName依赖

在自定义控件里加一个固定的标识属性,替代TypeName做逻辑判断,这样不管类型怎么混淆,标识都不会变:

Public Class PlusMinus
    Inherits UserControl

    Public ReadOnly Property ControlType As String
        Get
            Return "PlusMinus"
        End Get
    End Property

    ' 其他控件代码...
End Class

之后程序里用c.ControlType代替c.TypeName做判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:25:42