FsUnit: Невозможно протестировать переносимую библиотеку из-за этого и протестировать проект, имеющий разные версии F#.Core

У меня есть портативная библиотека, для которой FSharp.Core версия 3.7.4.0, Установка (в проекте Unit Test) FsUnit устанавливает, как зависимость, FSharp.Core версия 3.1.2.5,

Благодаря этому, используя функции переносимой библиотеки в моем проекте Unit Test, например:

module StammaTests.PieceTests

open Stamma
open NUnit.Framework
open FsUnitTyped

[<Test>]
let ``Testing a Basic function`` () =
    Piece.toChar Black King |> shouldEqual 'k'

выдает ошибку:

Сообщение о результате: System.IO.FileLoadException: не удалось загрузить файл или сборку 'FSharp.Core, версия =3.7.4.0, культура = нейтральная, PublicKeyToken=b03f5f7f11d50a3a' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Попробовал обновить FSharp.Core версия от NuGet для 4.0.0.1 (даже проверяя оба проекта при обновлении) и теперь даже что-то простое, например:

[<Test>]
let ``Testing the test`` () = 1 |> shouldEqual 1 

не работает, выдавая подобную ошибку.

Сообщение о результате: System.IO.FileLoadException: не удалось загрузить файл или сборку 'FSharp.Core, версия =4.3.1.0, культура = нейтральная, PublicKeyToken=b03f5f7f11d50a3a' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

И ошибка для первого провального теста не меняется.

Я чувствую, что упускаю что-то мучительно очевидное, и я нашел несколько людей с похожими проблемами, но я не понимаю, что они сделали, чтобы решить эту проблему (кажется, все они решили это...) Например, эту.

редактировать

Оба проекта являются библиотеками, и у меня нет app.config файл для добавления чего-либо.

2 ответа

Решение

Я нашел решение, которое на самом деле работает здесь

В основном, добавление App.config в тестовый проект, и писать следующее:

<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>
      <dependentAssembly>
        <assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.4.14350" newVersion="2.6.4.14350" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Это добавляет привязку к обоим Fsharp.Core а также NUnit.FrameworkВ отличие от обычных решений, где вы только добавляете привязку для Fsharp.Core,

Добавьте редирект связывания в свой app.config файл для перенаправления всех FSharp.Core привязки к желаемой версии. Например, чтобы использовать версию 4.4.0, ваш 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.4.0.0" newVersion="4.4.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Другие вопросы по тегам