Ошибка Dotfuscator в проекте Xamarin UWP

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

[Build Output] Couldn't load external type because its assembly can't be found: Windows.UI.Xaml.Controls.Page,Windows.Foundation.UniversalApiContract, Version=5.0.0.0, Culture=neutral, PublicKeyToken=null

Я следовал тем же инструкциям, что и для Android и iOS, и обновил Dotfuscator CE (5.40.0.8950) и Visual Studio Community 2017 (15.9.5). Любые идеи? Возможна ли защита UWP с помощью Dotfuscator CE?


person cncb    schedule 23.01.2019    source источник


Ответы (1)


Возможно, вам потребуется указать Dotfuscator, где найти UniversalApiContract, если расположение изменилось с более ранних версий SDK. Я нашел свой здесь, ваш путь может отличаться в зависимости от того, какая у вас версия:

C:\Program Files (x86)\Windows Kits\10\References\10.0.17763.0\Windows.Foundation.UniversalApiContract\7.0.0.0

Чтобы сообщить сообществу Dotfuscator, что нужно искать в этом дополнительном каталоге:

  1. Запустите редактор конфигурации (GUI) Dotfuscator из Visual Studio, выбрав Инструменты> Превентивная защита - Сообщество Dotfuscator.
  2. Откройте файл DotfuscatorConfig.xml для своего проекта UWP.
  3. В разделе Настройки> Пути загрузки сборки, щелкните зеленый значок плюса, чтобы добавить путь, вставьте путь к каталогу и нажмите OK.
  4. Сохраните файл конфигурации.

После этого попробуйте снова собрать проект из Visual Studio.

(Примечание: я работаю в команде Dotfuscator и отвечаю как часть моей работы.)

person Joe Sewell    schedule 23.01.2019
comment
Добавление этого привело к следующей ошибке: error : ILT0040: Type 'System.Runtime.Serialization.InvalidDataContract' was not found. Check that your build system references Windows.winmd, references .NET for Windows Store Apps, and is configured to use .NET Native. Я снял флажок Компилировать с помощью цепочки инструментов .NET Native, и теперь она строится. Спасибо! - person cncb; 24.01.2019
comment
К сожалению, при запуске произошел сбой с ошибкой: Unable to activate Windows Store app...Operation not supported. Unknown error: 0x80040904 Я не получаю этого сбоя при отключении Dotfuscator в сборке релиза. - person cncb; 24.01.2019
comment
@cncb Вам может потребоваться исключить определенные части вашего приложения из обфускации переименования Dotfuscator. Конкретные исключения будут отличаться в зависимости от приложения. Некоторые ресурсы: как настроить исключения переименования с помощью Редактор конфигурации в сообществе Dotfuscator и несколько примеров изучения / обнаружение исключений переименования (написано для Dotfuscator Professional, но концепции те же для сообщества). - person Joe Sewell; 24.01.2019
comment
Я добавил все необходимые исключения для моей dll Xamarin Forms, но я понятия не имею, что потребуется для ее части UWP exe (она вылетает при запуске во время активации). Похоже, должен быть очевидный класс или метод, которые следует исключить из переименования для UWP. Я безуспешно пытался исключить типы приложений и программ из переименования, но я не знаю, что будет задействовано в активации. - person cncb; 24.01.2019
comment
@cncb Может быть, попробуйте временно полностью отключить переименование, чтобы узнать, в чем проблема? Имейте в виду, что если вы исключаете тип, из переименования исключается только имя типа, имена его членов нужно будет исключить отдельно. - person Joe Sewell; 24.01.2019
comment
Отключение переименования полностью позволяет ему запускаться. Кроме того, работает только моя сборка Xamarin Forms (.NET Standard). Я предполагаю, что это может быть связано с отключением цепочки инструментов Compile with .NET Native, но я не знаю, как исправить связанную с этим ошибку сборки отсутствующего типа. - person cncb; 25.01.2019
comment
После дополнительных исследований кажется, что Dotfuscator не нужен при компиляции UWP с включенным .NET Native, поскольку это приводит к dll с собственным кодом, которые нельзя разобрать? Это правильно? - person cncb; 26.01.2019
comment
В то время как нативная компиляция может затруднить обратное проектирование приложения, Dotfuscator может сделать его еще сложнее. - person Joe Sewell; 29.01.2019