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

如何对自定义IL检查器隐藏C#类库中的数据类?

KTA自定义.NET类库隐藏冗余纯数据类的实现方案

KTA类检查器生成顶层类列表时,默认通过反射枚举程序集内的公开类型,你遇到的冗余条目问题,核心是仅作为参数使用的纯数据类被标记为公开类型,被反射逻辑抓取到了。以下是纯.NET/C#层面可落地的解决方案,不需要修改KTA内置配置:

  • 方案1:将数据类修改为internal访问级别,搭配InternalsVisibleTo特性(优先推荐)
    KTA生成顶层类列表时调用的是程序集的GetExportedTypes()方法,该方法只会返回public级别的类型,不会抓取internal类型。你可以把所有仅作为方法参数使用、不需要被KTA直接作为独立类实例化的纯数据类,访问修饰符从public改为internal,这些类就不会出现在顶层冗余列表中。
    如果数据类定义项目和对外暴露KTA调用方法的项目不是同一个,只需要在数据类所在项目的AssemblyInfo.cs中添加如下特性,允许方法所在程序集访问这些internal类即可,不会破坏原有编译:

    using System.Runtime.CompilerServices;
    [assembly: InternalsVisibleTo("你对外暴露给KTA的类库的完整程序集名称")]
    

    该方案完全不会影响方法参数的层级展示:KTA解析具体方法的参数结构时,会通过方法签名直接获取参数类型,递归读取类型下的所有公共属性渲染结构,不受参数类型本身访问级别的影响,和你之前使用public类的展示效果完全一致。

  • 方案2:使用EditorBrowsable特性标记过滤
    如果受项目架构限制无法调整类的访问修饰符,可以给所有纯数据类添加EditorBrowsable(EditorBrowsableState.Never)特性。该特性是.NET原生提供的API隐藏标记,用于告知IDE、自动化工具不要在公开API列表中展示对应类型,多数版本的KTA类检查器会识别该标记,跳过对应类的展示:

    using System.ComponentModel;
    
    [EditorBrowsable(EditorBrowsableState.Never)]
    public class MsGraphRequestParam
    {
        // 类内公共属性保持原有定义不变,不影响参数结构展示
    }
    

    注意:部分新版本KTA的类检查器未实现对该特性的识别,兼容性弱于方案1,建议优先测试后再使用。

  • 方案3:将数据类嵌套为业务类的私有类型
    如果某一个数据类仅被单个对外暴露的业务类使用,可以直接把该数据类定义为对应业务类的私有嵌套类,这类嵌套私有类型同样不会被GetExportedTypes()枚举到,不会出现在顶层类列表中。该方案的缺点是不适合多个业务类共用参数类的场景,会产生代码冗余。

以上三种方案均不会改动你已经调试完成的MS Graph API调用逻辑。如果尝试方案1后仍然能看到冗余类,说明你使用的KTA版本类检查器没有使用GetExportedTypes()枚举类型,而是枚举了程序集下所有类型,这种场景就属于KTA产品本身的机制问题,需要联系Kofax官方确认是否提供了自定义类型隐藏的配置入口。

KTA方法调用时的参数层级结构展示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:51:12