Я пытаюсь запутать кучу файлов в каталоге, и с каждой сборкой создается все больше и больше файлов. Я хотел бы знать, есть ли способ динамически создавать XML-файл конфигурации Dotfuscator с помощью задачи MSBUILD, которая будет генерировать XML-файл каждый раз, когда в каталог добавляется новый файл?
MSBUILD Динамическое создание конфигурации XML Dotfuscator
Ответы (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>
Последняя версия Dotfuscator 4.41.1 имеет последний флаг true. Это создаст файл конфигурации Dotfuscator, если файл отсутствует. Также вы можете добавить это в csproj, как описано в последнем руководстве по началу работы https://www.preemptive.com/dotfuscator/pro/userguide/en/getting_started_protect.html