我有一个带有内部日志记录模块的类库,该模块在命名空间级别使用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
}
所以我尝试将SkipType
与skipEnums
一起使用:
<Module file="$(InPath)\MyCompany.MyLibrary.dll">
<!--SkipType name="MyCompany.MyLibrary.Logging.LogLevel" skipEnums="true" /-->
</Module>
这有点奏效;它隐藏了枚举的名称(“ LogLevel”),但没有枚举值本身。
因此,我尝试了SkipType
和skipFields
:
<Module file="$(InPath)\MyCompany.MyLibrary.dll">
<!--SkipType name="MyCompany.MyLibrary.Logging.LogLevel" skipFields="true" /-->
</Module>
这行得通。
但是...当我检查生成的程序集时,以前隐藏的/内部名称空间MyCompany.MyLibrary.Logging
被暴露了,我希望保持隐藏状态。
这是一个错误吗?难道我做错了什么?尽管我认为该产品相当不错,但是Obfuscar的doco却非常骨架,所以我不得不猜测其中的一些。