Проблема с настройкой Obfuscar. Пропуск значений Enum - PullRequest
0 голосов
/ 03 января 2019

У меня есть библиотека классов с внутренним модулем ведения журнала, который использует 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 довольно скелетная, поэтому мне придется угадать кое-что из этого.

...