Система таргетинга 4.7 или 4.7.1 решит проблему. Это потому, что есть некоторые конфликты на стороне стандарта .net 2
й проект, который у нас есть с MongoDB, в какой-то момент будет иметь проблему с библиотекой System.Runtime.InteropServices, которая не загружается.
На этот раз ошибка интересна:
Внешнее исключение не может найти версию 4.3.0.0 библиотеки. Но внутреннее исключение не может найти версию 4.0.0.0
У кого-нибудь есть идеи по этому поводу?
Больше информации о проблеме:
Итак, NuGet имеет установленную 4.3.0.0
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="System.Runtime" version="4.3.0" targetFramework="net462" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" />
</packages>
packages.config подтверждает, что у меня установлена 4.3.0.0,
тем не мение,app.config которые всегда кажутся не синхронизированными с реальностью:
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
Добавлена строка о версии 4.0.1.0
В той же строке .. csproj это чушь:
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>x:\Packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
</Reference>
Поскольку он претендует на ссылку 4.0.1.0 с путем 4.3.0.0
Что-то сломано, и это всегда происходит с той же самой библиотекой; не только этот проект: где бы я ни включал MongoDB, эта библиотека является зависимой, и каждый раз возникают некоторые случайные проблемы с ней.
Когда я пытаюсь загрузить вручную:
var Name = new AssemblyName("System.Runtime.InteropServices.RuntimeInformation, Version=4.3.0.0");
var Asm = Assembly.Load(Name);
это также терпит неудачу.
Я обнаружил, что System.Runtime.InteropServices.RuntimeInformation.dll НЕ копируется в папку сборки, даже если она включена в проект.
Я нашел неприятный обходной путь: если я включаю MongoDB в основной exe-файл, даже если я его не использую, он зависит от библиотеки Interop, и это вынуждает копировать библиотеку в папку сборки, а затем работают последующие вызовы ,