Obfuscar配置跳过枚举值的问题

时间:2019-01-03 20:13:09

标签: vb.net enums obfuscation obfuscar

我有一个带有内部日志记录模块的类库,该模块在命名空间级别使用Enum来定义日志级别(调试,跟踪,错误等)。我在日志记录文本中使用这些枚举值的字符串转换。枚举标记为Friend(即内部的,未公开)。

当我最初进行混淆时,日志缺少枚举描述,最终我发现Obfuscar合理地混淆了枚举值,因此我添加了SkipEnum指令:

<Module file="$(InPath)\MyCompany.MyLibrary.dll">
  <SkipEnums type="MyCompany.MyLibrary.Logging.LogLevel" name="*" />
</Module>

更新:已将SkipEnum更正为SkipEnums。我尝试的代码包含后一个元素,所以这不是问题。)

根据Obfuscar地图文件,这似乎没有任何作用:

[MyCompany.MyLibrary]MyCompany.MyLibrary.Logging.LogLevel -> [MyCompany.MyLibrary] {unprintable obfuscated name}
{
    MyCompany.MyLibrary.Logging.LogLevel [MyCompany.MyLibrary]MyCompany.MyLibrary.Logging.LogLevel MyCompany.MyLibrary.Logging.LogLevel::Debug -> {unprintable obfuscated name}
    MyCompany.MyLibrary.Logging.LogLevel [MyCompany.MyLibrary]MyCompany.MyLibrary.Logging.LogLevel MyCompany.MyLibrary.Logging.LogLevel::Trace -> {unprintable obfuscated name}
    MyCompany.MyLibrary.Logging.LogLevel [MyCompany.MyLibrary]MyCompany.MyLibrary.Logging.LogLevel MyCompany.MyLibrary.Logging.LogLevel::Info -> {unprintable obfuscated name}
    ...
    MyCompany.MyLibrary.Logging.LogLevel [MyCompany.MyLibrary]MyCompany.MyLibrary.Logging.LogLevel MyCompany.MyLibrary.Logging.LogLevel::Off -> {unprintable obfuscated name}

    System.Int32 [MyCompany.MyLibrary]System.Int32 MyCompany.MyLibrary.Logging.LogLevel::value__ skipped:  special name
}

所以我尝试将SkipTypeskipEnums一起使用:

<Module file="$(InPath)\MyCompany.MyLibrary.dll">
  <!--SkipType name="MyCompany.MyLibrary.Logging.LogLevel" skipEnums="true" /-->
</Module>

这有点奏效;它隐藏了枚举的名称(“ LogLevel”),但没有枚举值本身。

因此,我尝试了SkipTypeskipFields

<Module file="$(InPath)\MyCompany.MyLibrary.dll">
  <!--SkipType name="MyCompany.MyLibrary.Logging.LogLevel" skipFields="true" /-->
</Module>

这行得通。

但是...当我检查生成的程序集时,以前隐藏的/内部名称空间MyCompany.MyLibrary.Logging被暴露了,我希望保持隐藏状态。

这是一个错误吗?难道我做错了什么?尽管我认为该产品相当不错,但是Obfuscar的doco却非常骨架,所以我不得不猜测其中的一些。

0 个答案:

没有答案