Ошибка выдачи Dotfuscator в проекте Xamarin.Android

Я выполнил шаги по интеграции Dotfuscator в свой проект Xamarin.Android, как описано здесь., но когда пришло время собрать проект, я получаю следующую ошибку:

Неожиданный сбой задачи «_DotfuscatorXamarin_DetermineDefaultInputsTask». 2>\path\to\PreEmptive.Dotfuscator.Xamarin.targets(570,5): ошибка MSB4018: System.NullReferenceException: ссылка на объект не указывает на экземпляр объекта. 2>\path\to\PreEmptive.Dotfuscator.Xamarin.targets(570,5): ошибка MSB4018: в InlineCode._DotfuscatorXamarin_DetermineDefaultInputsTask.Execute() в \path\to\AppData\Local\Temp\eruovv3u.0.cs:line 106 2>\path\to\PreEmptive.Dotfuscator.Xamarin.targets(570,5): ошибка MSB4018: в Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 2>\path\to \PreEmptive.Dotfuscator.Xamarin.targets(570,5): ошибка MSB4018: в Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext()

Я смотрел и смотрел в Интернете, но никто, кажется, не имеет этой проблемы. Я думаю, проблема как-то связана с созданием файла конфигурации по умолчанию при первой сборке. Любые идеи?


person AxiomaticNexus    schedule 03.10.2017    source источник
comment
Я работаю в PreEmptive, и чтобы лучше оценить проблему, у меня есть два вопроса: (1) Какую версию целевого файла вы используете? В первом комментарии в файле будет указана его версия; последняя версия 1.1.0. (2) Вы ссылаетесь на какие-либо библиотеки .NET Standard (или .NET Core)?   -  person Joe Sewell    schedule 03.10.2017
comment
@JoeSewell (1) Первый комментарий в целевом файле гласит: файл интеграции Dotfuscator-Xamarin для MSBuild версии 1.1.0. Поэтому я предполагаю, что использую последнюю версию. (2) Кроме того, проект Xamarin.Android ссылается на проект библиотеки классов .NET Standard 1.4 в том же решении.   -  person AxiomaticNexus    schedule 03.10.2017


Ответы (4)


ОБНОВЛЕНИЕ: эта проблема исправлена ​​в новых версиях Dotfuscator. См. подробные инструкции для бесплатного сообщества Dotfuscator. и для коммерческого лицензированного Dotfuscator Professional< /эм>. Оригинальный ответ следует ниже.


Полное раскрытие информации: я разработчик Dotfuscator в PreEmptive Solutions и отвечаю на этот вопрос в этой роли.

Вы правы, проблема заключается в генерации файла конфигурации по умолчанию в файле целей (PreEmptive.Dotfuscator.Xamarin.targets) - извините за это. В частности, интеграция сборки пытается обнаружить ссылки на проект, но ожидает классический формат проекта MSBuild, а не новый минимальный формат, используемый .NET Standard.

Вы можете обойти эту проблему следующим образом:

  1. В файле target найдите свойство _DotfuscatorXamarinConfigTemplateLines и скопируйте его значение (в разделе CDATA) в новый файл с именем DotfuscatorConfig.xml (или любое другое значение, которое вы указали для свойства DotfuscatorXamarinConfigFileName в файле проекта) в том же каталоге, что и файл проекта.
  2. В Visual Studio создайте свой проект один раз в конфигурации, которую вы хотите защитить (например, AnyCPU|Release). Это приведет к ошибке, потому что в новом конфигурационном файле еще нет входных сборок, но, создав сейчас, мы получим эти сборки в нужном месте для настройки Dotfuscator.
  3. Open Dotfuscator's user interface.
    • For Community Edition, from Visual Studio, open the Tools menu and select PreEmptive Protection - Dotfuscator.
    • Для Professional Edition запустите Dotfuscator Professional Edition из меню «Пуск».
  4. В пользовательском интерфейсе Файл | Откройте файл, созданный на шаге 1.
  5. На экране «Вводы» нажмите кнопку «Добавить ввод» (зеленый знак «плюс» в Community Edition, значок открытия папки в Professional Edition).
  6. Browse to your project directory, then obj\Release\DotfuscatorXamarin\dfin, and then select the assemblies you want to protect.
    • Substitute Release with the appropriate directory for the configuration you built in step 2.
    • Следует выбирать сборки, соответствующие проектам в вашем решении, а не выбирать сторонние и сборки, являющиеся частью фреймворка.
  7. Сохраните файл конфигурации.
  8. Navigate to the Project Properties editor.
    • In Community Edition, go to the Build Settings screen and select the Project Properties tab.
    • В Professional Edition перейдите на вкладку Настройки и выберите экран Настройки > Свойства проекта.
  9. Add the following project properties (instructions for Community Edition, and for Professional Edition):
    • Property name InDir, value obj\Release\DotfuscatorXamarin\dfin
    • Имя свойства OutDir, значение obj\Release\DotfuscatorXamarin\dfout
    • Имя свойства ReportDir, значение DotfuscatorReports\Release
    • Замените Release соответствующим каталогом для конфигурации, которую вы создали на шаге 2. Обратите внимание, что каталоги, на которые указывают OutDir и ReportDir, еще не будут существовать на диске.
  10. Сохраните файл конфигурации.
  11. Вернитесь к экрану «Вводы», выберите ввод и щелкните значок карандаша. Измените путь к сборке с абсолютного пути на ${configdir}\${InDir}\AssemblyName.dll, заменив фактическое имя и расширение сборки на AssemblyName.dll. Повторите для каждой входной сборки.
  12. Сохраните файл конфигурации (и зафиксируйте его в системе управления версиями).
  13. Пересоберите проект в Visual Studio. Интеграция сборки будет использовать ваш файл конфигурации вместо того, чтобы пытаться создать новый.
person Joe Sewell    schedule 04.10.2017
comment
Это сделало это. Спасибо за подробную инструкцию. - person AxiomaticNexus; 05.10.2017
comment
@ user6675963 Я полагаю, что он имел в виду более старую версию пользовательского интерфейса Dotfuscator. Раздел свойств на самом деле не является вкладкой, он находится на левой панели прямо под элементом «Входы». - person AxiomaticNexus; 08.10.2017
comment
@Джо Сьюэлл, ты мастер. Он работает так, как ожидалось .. Спасибо! - person Balagurunathan Marimuthu; 12.08.2019

в дополнение к чудесному решению Джо я изменил одно значение с true на false в соответствии с инструкциями на https://www.preemptive.com/dotfuscator/pro/userguide/en/getting_started_xamarin.html#pctoc-setup, чтобы собрать/запустить мое решение для Android.

    <DotfuscatorXamarinGenerateNewConfigFile>false</DotfuscatorXamarinGenerateNewConfigFile>
person Allister    schedule 06.07.2018


В какой-то момент мне не хватало файла PreEmptive.Dotfuscator.Xamarin.targets в корне проекта. Я уже выполнил инструкции выше, описанные Джо Сьюэллом, но позже заметил отсутствующий файл.

Ошибка была такой:

    Error       The "_DotfuscatorXamarin_DetermineDefaultInputsTask" task failed unexpectedly.
System.NullReferenceException: Object reference not set to an instance of an object.
   at InlineCode._DotfuscatorXamarin_DetermineD  efaultInputsTask.Execute() in c:\Users\hieta\AppData\Local\Temp\k3a5f2bj.0.cs:line 106
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() WorkSafe.Droid      

Просто к вашему сведению, если кто-то еще может избежать пустой траты времени.

person Pistoolirapu    schedule 03.07.2018