Dotfuscator 5 CE - переименование исключения по подписи - PullRequest
0 голосов
/ 23 января 2012

Я запускаю dotfuscator 5 из командной строки, используя файл конфигурации.Это работает нормально, более или менее, за исключением одного нового требования, которое только что появилось.

У меня есть класс с небольшим числом (менее полдюжины) пустых методов, которые необходимо исключить из переименования (дляокольная система вызова отраженных методов по имени; не спрашивайте ...)

Их подпись (имена изменены, чтобы защитить невинных) void Method(System.Xml.XmlNode xnode, ref System.String str).

Мой вопросfold:

  • Как выразить параметр ref в синтаксисе конфигурации dotfuscator?
  • Почему не работает сигнатура метода, указанного в файле карты?

Файл карты содержит элемент <signature>void(System.Xml.XmlNode, string&amp;)</signature>, когда эти методы переименованы.Поэтому я ожидал бы иметь возможность указать в файле конфигурации:

<type name="ParentClass" excludetype="false">
<method signature="void(System.Xml.XmlNode, string&amp;)"/>
</type>

Это не работает.В выводе утилиты командной строки утверждается, что файл конфигурации недействителен.

Если я включу синтаксис name=".*" regex="true", all , методы в типе исключаются.Я не хочу этогоЯ понимаю, почему это так - правила объединяются в единое целое - но утилита вынуждает меня использовать опции, которые мне не нужны, отклоняя конфигурационные файлы, которые указывают мои действительные требования.

Что дает?

Я чувствую - потому что меня это начинает раздражать - я должен указать, что я нашел документацию по Dotfuscator как ... не очень хорошую.

1 Ответ

1 голос
/ 23 января 2012

Файл конфигурации недействителен, поскольку у узла метода нет «имени».

Если вы просто пытаетесь исключить один конкретный метод, вы можете использовать пользовательский интерфейс, чтобы фактически установить флажок рядом с этим методом в Переименование -> Исключает древовидное представление слева, которое сгенерирует правильный XML для вас. Если вы решите пойти по этому пути, сначала удалите существующий узел <type>.

Если вы хотите, чтобы какой-либо метод в ParentClass соответствовал этой сигнатуре (даже если она только одна), xml должен быть (подставьте в правильное значение <Namespace>):

 <type name="<Namespace>.ParentClass" excludetype="false">
    <method name=".*" regex="true" signature="void(System.Xml.XmlNode, string&amp;)"/>
 </type>

Создав правило, вы можете использовать пользовательский интерфейс для перехода на вкладку Переименовать -> Исключить, щелкните правой кнопкой мыши узел метода в древовидном представлении Пользовательские правила справа и выберите Предварительный просмотр. Следует выделить метод, который вы ищете. Вот скриншот того, как он должен выглядеть в пользовательском интерфейсе при нажатии Preview: http://files.preemptive.com/Support/CustomRuleRefParam.png

...