У меня есть библиотека классов с внутренним модулем ведения журнала, который использует Enum
на уровне пространства имен для определения уровня журнала (Debug, Trace, Error и т. Д.).Я использую преобразование строк перечисленных значений в тексте журнала.Перечисление помечено Friend
(т. Е. Внутреннее, не публикуется публично).
Когда я первоначально запустил запутывание, в журналах отсутствовали описания перечисления, и я в конечном итоге обнаружил, что Obfuscar, разумно, запутывает перечислениезначения, поэтому я добавил директиву SkipEnum
:
<Module file="$(InPath)\MyCompany.MyLibrary.dll">
<SkipEnums type="MyCompany.MyLibrary.Logging.LogLevel" name="*" />
</Module>
( ОБНОВЛЕНИЕ : исправлено SkipEnum
до SkipEnums
выше. Код, который я пробовал, содержал последний элемент, так чтопроблема была не в этом.)
По-видимому, это ничего не дало в соответствии с файлом карты Обфускара:
[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 довольно скелетная, поэтому мне придется угадать кое-что из этого.