我有一个带有内部日志模块的类库,它在名称空间级别使用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,并且希望这个名称空间保持隐藏。
这里面有什么窃听器吗?我做错了什么吗?虽然我认为这个产品很好,但奥弗塞卡的doco相当结实,所以我不得不猜测其中的一些。
发布于 2022-01-07 09:05:06
SkipEnums应以下列格式使用:
<SkipEnums value="true" />跳过重命名所有枚举类型的。但是,我不能成功地按名称进行筛选。
https://stackoverflow.com/questions/54029149
复制相似问题