После обновления нашего уровня доступа к данным с EF6 до EF Core 2.1 (.4) у нас возникают проблемы с FileLoadException
с System.ComponentModel.Annotations, Version=4.2.0.0
, что странно, поскольку EF Core 2.1.4 использует 4.5.0.0
, и ничего более(мы можем найти) в нашем решении использует 4.2.0.0
.
Скажем, например, у нас есть следующая структура проекта в нашем решении:
DataAccess: (все проекты, использующие Microsoft.EntityFrameworkCore.SqlServer Версия 2.1.4)
- Модели (только моделисоздан с помощью Scaffold-DbContext)
- Core (абстрактные поставщики, персистенты и т. д.)
- общий (DTO, конкретные провайдеры, персистенты и т.Базовый пакет установлен)
- Некоторый проект (A) со ссылками на модели, Core, Common
Даже если проект A, например, простое консольное приложение, которое просто загружает что-то из базы данных и отображаетэто к консоли, когда что-то оценивается на уровне абстрактного провайдера в DataAccess.Core, мы получаем следующее исключение:
System.IO.FileLoadException произошло HResult = 0x80131040 Сообщение = Не удалось загрузить файл илисборка 'System.ComponentModel.Annotations, версия = 4.2.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a' или одна из ее зависимостейencies.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040)
Странно то, что мы нигде не можем найти System.ComponentModel.Annotations, Version=4.2.0.0
, версия даже пропускается в Nuget.
Пытается принять ответ на этот вопрос: Не удалось загрузить файл или сборку 'System.ComponentModel.Annotations, Version = 4.1.0.0 , добавив следующее в мои .csproj
файлы, кажется, решить проблему для некоторых проектов, но не для всех:
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
В сгенерированных файлах DataAccess.Models.dll.config после построения единственной ссылки на System.ComponentModel.Annotations
есть следующее:
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
</dependentAssembly>
Что не 4.2.0.0
, но мыВы не уверены, где определяется этот новый номер версии.Это, вероятно, что-то незначительное, что мы пропустили или неправильно настроили, но некоторая помощь в поиске проблемы или указателей на то, где искать, была бы признательна.Решение, при котором нам не нужно добавлять AutoGenerateBindingRedirects
к каждому .csproj
файлу, было бы идеально