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>