.NET runtime пытается загрузить FSharp.Core 4.3.0, даже если все ссылки на проекты 4.3.1

Я создал проект в F #, который предназначен для среды исполнения F # 3.1 (то есть FSharp.Core версии 4.3.1). Затем я создал консольное приложение С#, добавил ссылку на проект в мой проект F #, добавил ссылку на FSharp.Core.dll 4.3.1.

Все компилируется без каких-либо ошибок или предупреждений, но среда выполнения вызывает это, когда я пытаюсь использовать любой тип из проекта F #:

System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly manifest definition does not match the assembly reference.

Почему он ищет FSharp.Core 4.3.0, когда все мои проекты ссылаются на 4.3.1? Если я изменю все ссылки на проекты с 4.3.1 по 4.3.0, все будет работать нормально, но что с версией 4.3.1?

P.S. Обе цели проекта .NET 4.5.1. Я использую Microsoft Visual Studio 2013

Ответы

Ответ 1

Это дикое предположение, но на основе исключения вы получаете вероятность, что у вас есть другие сборки FSharp внутри вашего проекта.

Таким образом, ошибка указывает, что для одной из зависимостей, которые вы используете, требуется FSharp.Core 4.3.0.0. Скажем, ваш проект ссылается на другие зависимости FSharp, например, FSharp.Data 2.2.0.0. Даже если вы добавили явную ссылку в свой проект в FSharp.Core 4.3.1.0, это не сработает, потому что FSharp.Data 2.2.0.0 был создан против FSharp.Core 4.3.0.0. Чтобы исправить это, вам нужно добавить bindingRedirect в файл конфигурации проекта app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Это должно устранить проблему.