Protobuf-net вызывает ошибку сертификации в магазине Windows Phone

Недавно я начал использовать библиотеку protobuf-net, чтобы обойти отсутствие двоичной сериализации в.Net Core на Windows Phone 8.1 для порта существующей игры.

Пока protobuf-net отлично работает для меня. Однако, когда я пришел, чтобы представить приложение, оно не прошло сертификационные испытания. В отчете перечислены различные методы и классы, входящие в dll protobuf-net, как неподдерживаемые API.

Пример из этого отчета:

Этот API не поддерживается для этого типа приложения - Api=System.Reflection.Emit.Label. Модуль =MSCORLIB, PUBLICKEYTOKEN=7CEC85D7BEA7798E. Файл = Protobuf-net.dll. Этот API не поддерживается для этого типа приложения - Api=System.Reflection.Emit.DynamicMethod. Модуль =MSCORLIB, PUBLICKEYTOKEN=7CEC85D7BEA7798E. Файл = Protobuf-net.dll. Этот API не поддерживается для этого типа приложения - Api=System.Reflection.Emit.ILGenerator. Модуль =MSCORLIB, PUBLICKEYTOKEN=7CEC85D7BEA7798E. Файл = Protobuf-net.dll. Этот API не поддерживается для этого типа приложения - Api=System.Reflection.Emit.LocalBuilder. Модуль =MSCORLIB, PUBLICKEYTOKEN=7CEC85D7BEA7798E. Файл = Protobuf-net.dll. Этот API не поддерживается для этого типа приложения - Api=System.Reflection.MemberTypes. Модуль =MSCORLIB, PUBLICKEYTOKEN=7CEC85D7BEA7798E. Файл = Protobuf-net.dll.

Есть еще много, но я оставил их для краткости. Однако, насколько я могу судить, в документации MSDN говорится, что каждый из этих API-интерфейсов поддерживается в Windows Phone 8.1. Конечно, в моих собственных тестах библиотека работала корректно на устройстве в течение нескольких недель при развертывании из Visual Studio.

Кто-нибудь знает о каких-либо шагах, которые я мог бы здесь упустить, о каком-то флаге, который нужно установить в манифесте пакета, или о чем-то подобном? Или я мог использовать неправильную версию protobuf-net (я собрал dll из проекта WindowsPhone8.0)?

Спасибо

Том

1 ответ

Поскольку вы делаете это как универсальное приложение, вы ограничиваете себя API-интерфейсами, которые также будут доступны для настольных приложений, и пока часть System.Reflection.Emit есть пространство имен, оно не включает те классы, на которые ссылается ваше сообщение об ошибке.