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