Мы разрабатываем бизнес-приложение UWP, которое будет опубликовано через Магазин Windows для бизнеса (цель сборки> = 1607). Ссылки на приложение UWP:
- Stubble.Core через nuget (нацелен на .NET Standard 1.3), который ссылается
- System.Reflection.TypeExtensions 4.3.0, который ссылается на
System.Private.Reflection.Extensibility.dll
версия4.0.0.0
.
Приложение будет компилироваться и запускаться локально как в режиме отладки, так и в режиме выпуска (скомпилировано через .NET native). При загрузке .appxupload
в Магазин Windows полученное приложение выдаст исключение:
System.IO.FileNotFoundException: не удалось загрузить файл или сборку System.Private.Reflection.Extensibility, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a или одну из его зависимостей. Система не может найти указанный файл. Имя файла: 'System.Private.Reflection.Extensibility, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a' в Internal.Reflection.Extensions.NonPortable.PropertyPolicies.GetInheritedMemberInfo (PropertyInfo baseMemberInfo). Тип отраженного Extensions.NonPortable.MemberEnumerator.d__11.MoveNext () в System.Collections.Generic.LowLevelList1.InsertRange (индекс Int32, коллекция IEnumerable`1) в System.Reflection.TypeExtensions.GetMembers (тип типа, имя объектаFilterOrags) в System.Reflection.TypeExtensions. .Reflection.TypeExtensions.GetMembers (тип типа, BindingFlags bindingAttr) в Stubble.Core.Settings.RendererSettingsDefaults.GetMemberLookup (тип objectType)
Я могу воспроизвести эту проблему при извлечении .appxbundle
из .appxupload
и загрузке пакета через PowerShell. Обратите внимание, что .appxbundle
в .appxupload
включает сборки .NET и поэтому не компилируется в .NET native.
Я полагаю, что Магазин Windows должен выполнить эту задачу, но на самом деле это не так (как вы можете видеть из трассировки стека выше) - возможно, из-за того, что мы используем функцию Desktop Bridge для нашего приложения UWP.
При поиске System.Private.Reflection.Extensibility.dll
кажется, что эта сборка относится к .NET Native и цепочке сборки (поскольку она поставляется с пакетом nuget .NET Native и MSBuild).
Итак, мой вопрос: почему приложение не может загрузить сборку (но не в режиме отладки / выпуска)? System.Reflection.TypeExtensions
ожидает ли, что приложение будет скомпилировано с .NET Native, который действительно работает локально?
Я пытался:
- Загрузка
.appxbundle
, скомпилированного с .NET Native (что не принято в магазине) - Ссылка на разные версии пакета
Microsoft.NETCore.UniversalWindowsPlatform
(который включает пакеты .NET Native) - Ссылка на частную библиотеку вручную (что приводит к ошибкам компилятора из-за дублирования ссылок на сборки)
- Обновление
System.Reflection.TypeExtensions
до 4.4 - Создана
.wapproj
оболочка для развертывания (проблема остается прежней) - Добавлено перенаправление привязки, которое приводит к сбою приложения.