我有一个带有内部日志记录模块的类库,它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
with 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 相当简陋,所以我不得不猜测其中的一些。