Ainda outro erro System.Runtime.InteropServices

Todo projeto que temos com o MongoDB, em um ponto do outro, tem um problema com a biblioteca System.Runtime.InteropServices que não carrega.

Desta vez, o erro é interessante:

A exceção externa não pode encontrar a versão 4.3.0.0 da lib. Mas a exceção interna não pode encontrar a versão 4.0.0.0

Alguém tem uma idéia sobre isso?

Mais informações sobre o problema:

Portanto, o NuGet possui o 4.3.0.0 instalado

<?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 confirma que tenho 4.3.0.0 instalado,

Contudo,app.config que sempre parecem estar fora de sincronia com a realidade:

  <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>

Foi adicionada uma linha sobre a versão 4.0.1.0

Na mesma linha .. o csproj é um disparate:

<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>

Como ele afirma referenciar 4.0.1.0 com o caminho de 4.3.0.0

Há algo quebrado e está sempre acontecendo com a mesma lib exata; não apenas neste projeto: em qualquer lugar que eu inclua o MongoDB, essa lib vem como uma dependência e, toda vez, há alguns problemas aleatórios com ela.

Quando tento carregar manualmente:

        var Name = new AssemblyName("System.Runtime.InteropServices.RuntimeInformation, Version=4.3.0.0");
        var Asm = Assembly.Load(Name);

falha também.

Estou descobrindo que o System.Runtime.InteropServices.RuntimeInformation.dll NÃO é copiado para a pasta de compilação, mesmo que esteja incluída no projeto.

Encontrei uma solução desagradável: se eu incluir o MongoDB no exe principal, mesmo que eu não o use, ele depende da lib de interoperabilidade e isso forçou a lib a ser copiada para a pasta build e as chamadas subseqüentes funcionam .

questionAnswers(3)

yourAnswerToTheQuestion