Не удалось загрузить файл или сборку "System.ComponentModel.Annotations, Version = 4.1.0.0
У меня есть библиотека классов .NET Standard 1.4, которая ссылается на пакет NuGet System.ComponentModel.Annotations(4.3.0).
Затем я ссылаюсь на эту библиотеку классов из тестового проекта .NET Framework 4.6.2. Он строит отлично, но во время выполнения я получаю следующую ошибку:
Возникло событие System.IO.FileLoadException HResult = 0x80131040
Сообщение = Не удалось загрузить файл или сборку 'System.ComponentModel.Annotations, Version = 4.1.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a ' или одна из его зависимостей. установленное определение манифеста сборки не соответствует сборке Справка. (Исключение из HRESULT: 0x80131040)
Я попытался добавить ссылку на пакет System.ComponentModel.Annotations(4.3.0) NuGet из проекта net462, но это не имело никакого значения.
Я попытался добавить ссылку на библиотеку .NET Standard из проекта net462, но все равно не повезло.
Я что-то упустил? Является ли это известной ошибкой, если она работает?
Любая помощь очень ценится!
Ответы
Ответ 1
Во многих случаях это можно решить, добавив следующий файл csproj вашего тестового проекта:
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
Это заставляет процесс сборки создавать файл .dll.config
в выходном каталоге с необходимыми переадресациями связывания.
Причина в том, что "классические" проекты тестирования csproj являются истинными "библиотеками" и по умолчанию не требуются обязательные переадресации. Но для этого требуются запущенные модульные тесты. Это становится проблемой только в том случае, если проекты, на которые ссылаются, нуждаются в правильной работе этих перенаправлений. Обычно это работает при непосредственной установке всех пакетов NuGet, которые использует библиотека, на которые ссылается библиотека, но с новым типом пакетов PackageReference
пакетов NuGet, это не так.
Смотрите другие случаи, когда это исправление помогло:
Не удалось загрузить файл или сборку Microsoft.Extensions.DependencyInjection.Abstractions, Version = 1.1.0.0
При использовании .Net Standard 1.4 в библиотеке и .Net framework 4.6.1 в приложении и приложении не удается загрузить файл System.IO.FileSystem, Version = 4.0.1.0
Ответ 2
У меня была аналогичная проблема, но ни один из вышеперечисленных ответов не помог мне. Оказывается, решение очень просто, я только что выполнил следующую команду в диспетчере пакетов:
Install-Package System.ComponentModel.Annotations -Version 4.1.0
Ответ 3
В моем случае я использовал 4.0.0, поэтому я исправил его, добавив
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations"
publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="4.1.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>
Адаптируйте требуемую версию.
Ответ 4
Получил это, используя перенаправление сборки, как описано в: просто вызовите FunctionsAssemblyResolver.RedirectAssembly()
в начале вашей программы. fooobar.com/questions/15685624/...
using System.Reflection;
using System.Diagnostics;
using System.Linq;
public class FunctionsAssemblyResolver
{
public static void RedirectAssembly()
{
var list = AppDomain.CurrentDomain.GetAssemblies().OrderByDescending(a => a.FullName).Select(a => a.FullName).ToList();
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var requestedAssembly = new AssemblyName(args.Name);
Assembly assembly = null;
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
try
{
assembly = Assembly.Load(requestedAssembly.Name);
}
catch (Exception ex)
{
}
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
return assembly;
}
}
Ответ 5
Для меня ни один из других решений не работал.
Я разрешил это, вручную добавив ссылку на System.ComponentModel.DataAnnotations
сам (через project → References), вместо того, чтобы позволить Visual Studio обрабатывать его через быстрое меню быстрого запуска.
Ответ 6
https://tutel.me/c/programming/questions/47784237/register.html
Проблема решена по ссылке выше
Ответ 7
Также для ошибки версии 4.2.0.0
это исправлено для меня в web.config
:
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.6.0" />
</dependentAssembly>
</assemblyBinding>
Ответ 8
Я исправил эту ошибку, выполнив команду "Чистое решение" в Visual Studio 2019.