UWP во время разработки: "Не удалось загрузить файл или сборку" для различных пакетов NuGet

Я использую Visual Studio 2017 v15.3.3. Мой проект UWP ориентирован на Windows Creators Update 15063, и мои пакеты Nuget следующие:

Мое решение строится без ошибок и работает нормально, однако я сталкиваюсь с ошибками во время разработки в моем проекте приложения UWP из-за того, что мой код программной части и / или код ViewModel ссылается на пакеты NuGet. Вот что я вижу:

Эта проблема не является уникальной для System.Reactive. Я столкнулся с другой (но, казалось бы, связанной) ошибкой с пакетом Newtonsoft.Json v10.0.3:

Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The bound assembly has a version that is lower than that of the request. (Exception from HRESULT: 0x80132000)

Интересно, что понижение System.Reactive до v3.0.0 не устраняет проблему: ошибка утверждает, что система не может найти сборку v3.0.0.

Аналогичная проблема с последней версией пакета AutoMapper (v6.1.1)

Чтобы воспроизвести проблему:

  1. Создайте новый проект UWP (нацеливайтесь на что угодно, это не имеет значения)
  2. Создать новый UserControl
  3. В конструктор этого UserControl добавьте код, ссылающийся на любой из этих пакетов, например: var s = new Subject<int>(); и добавить using System.Reactive.Subjects;
  4. Добавьте этот пользовательский элемент управления в качестве элемента XAML в MainPage.xaml
  5. Скомпилируйте и запишите ошибку

... или посмотрите этот образец здесь

Огорчает то, что эти три больших пакета (System.Reactive, Newtonsoft.Json, AutoMapper) прекрасно работали в моем проекте UWP, когда он был в Visual Studio 2015 несколько недель назад, прежде чем перейти на VS 2017.

Единственное, что до сих пор работало, - это понижение версии Newtonsoft.Json с последней версии 10.0.3 до версии 9.0.1 (снижение до версии 10.0.2 или 10.0.1 не сработало). К сожалению, я не могу понизить версию System.Reactive, так как у них есть незарегистрированные версии ниже 3.0

Я также попытался выполнить ремонт моей установки VS, а также установить компоненты mobile/xamarin.

Любые обходные пути или идеи будут высоко оценены, так как это проблема для меня, спасибо!

1 ответ

Решение

Проблема в том, что версия 3.0.0 System.Reactive не может быть очень совместим с UWP. И я решаю это через обновление до System.Reactive 4.0.0-preview с помощью следующей команды в консоли диспетчера пакетов.

Install-Package System.Reactive -Version 4.0.0-preview00001

И вы также можете отключить код проекта в конструкторе xaml, чтобы решить эту проблему. Для получения дополнительной информации вы можете обратиться к разделу "Отладка или отключение кода проекта" в XAML Designer.

Во многих случаях необработанные исключения в конструкторе XAML могут быть вызваны тем, что код проекта пытается получить доступ к свойствам или методам, которые возвращают разные значения или работают по-разному, когда ваше приложение выполняется в конструкторе. Вы можете разрешить эти исключения путем отладки кода проекта в другом экземпляре Visual Studio или временно запретить их, отключив код проекта в конструкторе.

Обновить

За Newtonsoft.Json Похоже, что компонент WinRT не смог найти правильную сборку Newton.Json. Временное решение - вручную добавить Newtonsoft.json.dll файл. Вы можете достичь этого, выполнив следующие действия:

Щелкните правой кнопкой мыши Ссылки -> Добавить ссылку-> Обзор...-> Найти C:\Users.nuget\packages\Newtonsoft.Json\10.0.3\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.json.dll-> Нажмите кнопку Добавить. Перестройте свой проект и запустите. Эта ошибка должна исчезнуть.\

И вы также можете использовать вышеуказанный способ, чтобы решить AutoMapper выпускать

Другие вопросы по тегам