MSBUILD Динамическое создание конфигурации XML Dotfuscator

Я пытаюсь запутать кучу файлов в каталоге, и с каждой сборкой создается все больше и больше файлов. Я хотел бы знать, есть ли способ динамически создавать XML-файл конфигурации Dotfuscator с помощью задачи MSBUILD, которая будет генерировать XML-файл каждый раз, когда в каталог добавляется новый файл?


person varun7447    schedule 26.03.2017    source источник


Ответы (2)


Сейчас самое время использовать ввод каталога. Вместо того, чтобы представлять одну сборку (.exe или .dll), этот тип ввода Dotfuscator захватывает все сборки в каталоге. При изменении содержимого каталога сборка Dotfuscator автоматически подхватывает любые новые сборки.

Чтобы создать файл конфигурации Dotfuscator с вводом каталога, откройте графический интерфейс и добавьте ввод, как обычно (направления для графического интерфейса Community Edition и для автономного графического интерфейса Professional Edition), но вместо выбора файла в диалоговом окне Обзор... просто перейдите в каталог и нажмите «Открыть», пока «Имя файла» все еще отображается как «Выбор папки». Затем сохраните конфигурацию.

Отныне всякий раз, когда вы запускаете Dotfuscator (будь то из автономного графического интерфейса, командной строки, интеграции с Visual Studio или задачи MSBuild), все сборки в каталоге будут обрабатываться как входные данные.

Примечание. Если вы посмотрите на сам файл конфигурации, вы можете быть удивлены тем, что в нем по-прежнему перечислены отдельные сборки:

<input>
  <loadpaths />
  <asmlist>
    <package refid="19e1b0c5-7221-476f-af4b-bafef68edc95">
      <file dir="C:\code\BasicTestApp\BasicTestApp\bin" name="Debug" />
      <asmlist>
        <inputassembly refid="a6da5d8d-c181-4103-840d-d8cc7c85937a">
          <option>honoroas</option>
          <option>stripoa</option>
          <option>transformxaml</option>
          <file dir="" name="BasicTestApp.exe" />
        </inputassembly>
        <inputassembly refid="df84dad0-fbe8-49ab-b8c8-9fb59e706785">
          <option>honoroas</option>
          <option>stripoa</option>
          <option>library</option>
          <option>transformxaml</option>
          <file dir="" name="ClassLibrary.dll" />
        </inputassembly>
      </asmlist>
    </package>
  </asmlist>
</input>

Несмотря на такой макет, Dotfuscator будет обрабатывать все сборки в каталоге C:\code\BasicTestApp\BasicTestApp\bin\Debug при запуске сборки на основе этого файла конфигурации, а не только те две из перечисленных. Элементы сборки в конфигурации присутствуют только для того, чтобы вы могли создавать правила для отдельных сборок в графическом интерфейсе (например, чтобы одна сборка находилась в режиме библиотеки). Список представляет состояние каталога, когда GUI в последний раз модифицировал конфигурацию.

Отказ от ответственности: я работаю в команде Dotfuscator и отвечаю на этот вопрос в рамках своей работы.


Дополнительное примечание в связи с разъяснениями в комментариях: в пакете каталогов есть функция, с помощью которой вы можете исключить определенные сборки из обфускации. Эти сборки будут рассматриваться как артефакт пакета и просто копироваться из ввода в вывод без изменений. Любые запутанные сборки, которые ссылаются на эти исключенные сборки, по-прежнему будут обрабатываться правильно.

Для этого в графическом интерфейсе щелкните правой кнопкой мыши сборку внутри пакета и выберите «Исключить сборку из пакета». Или, если вы предпочитаете отредактировать файл конфигурации, добавьте следующий тег <option> в качестве дочернего элемента каждого соответствующего тега <inputassembly>:

<option>artifact</option>
person Joe Sewell    schedule 27.03.2017
comment
Спасибо за ответ. Теперь это вызывает другой вопрос, поэтому я не хочу запутывать все dll в папке, поскольку некоторые из .dll, которые я использую, являются сторонними, и они уже запутаны. Итак, интересующие меня можно скопировать в другое место, запутать их с помощью Dotfuscator и скопировать обратно перед созданием пакета? Есть ли в руководстве пользователя образец задачи msbuild для поддержки каталога dotfuscator в качестве примера? - person varun7447; 27.03.2017
comment
@ varun7447 Я добавил примечание к своему ответу, которое, я думаю, ответит на первый вопрос вашего комментария. Я рекомендую использовать описанный метод вместо копирования некоторых библиотек DLL, потому что тогда вам придется настроить собственный путь загрузки сборки (ваши запутанные библиотеки DLL будут ссылаться на исключенные библиотеки DLL, которые больше не находятся в том же каталоге). Что касается вашего второго вопроса о поддержке MSBuild, для этого случая нет конкретного примера, но поскольку пакет является функцией файла конфигурации, вы можете просто передать путь к файлу конфигурации в свойство ConfigPath задачи Dotfuscate. - person Joe Sewell; 28.03.2017
comment
Идеально, это действительно полезно. Спасибо за ваш быстрый ответ. - person varun7447; 28.03.2017

Последняя версия Dotfuscator 4.41.1 имеет последний флаг true. Это создаст файл конфигурации Dotfuscator, если файл отсутствует. Также вы можете добавить это в csproj, как описано в последнем руководстве по началу работы https://www.preemptive.com/dotfuscator/pro/userguide/en/getting_started_protect.html

person varun7447    schedule 12.07.2019