Используйте FSharp.Data в проекте библиотеки классов или тестовом проекте.

Я пытаюсь использовать библиотеку FSharp.Data в проекте библиотеки классов F # (не переносимый класс. Я получаю эту ошибку:

Сбой теста «Test1»: OneTimeSetUp: System.MissingMethodException: метод не найден: «FSharp.Data.CsvFile FSharp.Data.CsvFile.Load(System.String, Microsoft.FSharp.Core.FSharpOption1<System.String>, Microsoft.FSharp.Core.FSharpOption1, Microsoft.FSharp.Core.FSharpOption1<Boolean>, Microsoft.FSharp.Core.FSharpOption1) '.

Я погуглил ошибку и нашел пару похожих сообщений, подобных этому.

Не удается использовать F# JsonProvider в переносимой библиотеке классов

но я не в переносной библиотеке классов, а в обычной библиотеке классов. также я получаю аналогичную ошибку, если хочу использовать FSharp.Data в проекте модульного тестирования F #.

Любые советы будут оценены.

К вашему сведению, я установил FSharp.Data в свою библиотеку классов и тестовый проект, который получил ошибку.

Спасибо

я пытался ориентироваться на .net 4.5, 4.5.2 и F # 4.3.1 и 4.4 с FSharp.Data версии 2.0.14 до 2.3.2, мне не повезло ни с одной из комбинаций.


person casbby    schedule 10.08.2016    source источник
comment
Все проблемы, которые я видел с MissingMethodException, имеют одну и ту же причину: конфликты версий сборки. Решение состоит в том, чтобы добавить перенаправление привязки сборки в файл App.config. Это обязательно будет дубликат, например. из stackoverflow.com/q/23389752/126014 есть 31 результат на Stack Overflow.   -  person Mark Seemann    schedule 10.08.2016
comment
Привет, Марк, по ссылке есть решение, поскольку, по-видимому, FSharp.Data не поддерживает библиотеки PCL с использованием профиля 7. После изменения профиля моего проекта PCL на 47 все работает, как ожидалось. Но я не пишу переносимый класс (скорее обычную библиотеку классов). Я могу вызвать оскорбительную библиотеку классов F# (использующую FSharp.Data) из консольной программы без ошибок. Я обнаружил эту проблему только во время моего модульного теста этой библиотеки классов F#. Очевидно, что мой тестовый проект - это проект библиотеки классов. если проблема в сборке, я бы получил ту же ошибку в консольном приложении.   -  person casbby    schedule 10.08.2016
comment
Пробовали ли вы просмотреть один из других 31 пост здесь? Например. Вот этот? stackoverflow.com/q/13846561/126014   -  person Mark Seemann    schedule 10.08.2016
comment
@MarkSeemann, даже когда вы вручную устанавливаете ссылку на FSharp.Core 4.4.0, средство запуска тестов Visual Studio может выбрать 4.3. Я боролся с этим целую неделю. В конце концов я заменил ссылки в своей библиотеке и тестовых проектах пакетом FSharp.Core nuget. До этого бегун тестов даже не находил тесты   -  person Panagiotis Kanavos    schedule 10.08.2016
comment
@casby в моем случае мне пришлось удалить все ручные ссылки на FSharp.Core и использовать пакет nuget FSharp.Core, чтобы средство запуска тестов Visual Studio не загружало 4.3 (то есть F # 3). Также проверьте наличие отсутствующих перенаправлений в app.config вашего консольного приложения.   -  person Panagiotis Kanavos    schedule 10.08.2016


Ответы (1)


Спасибо Марку и Панайотису. Я могу решить эту проблему с отсутствующим методом с помощью перенаправления привязки. Для тех, у кого похожая проблема, я сделал следующее:

  1. добавьте новый файл App.Config в тестовый проект.
  2. переименуйте файл конфигурации в anyAssemblyName.dll.config
  3. добавьте следующие строки (в зависимости от вашей версии F#) в файл конфигурации:

       <runtime>
        <legacyUnhandledExceptionPolicy enabled="true" />
        <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>
    
  4. убедитесь, что файл конфигурации экспортируется, когда он новее

Я должен использовать TestDriven/test с nunit, чтобы запустить окно nunit, поскольку обозреватель тестов VS по-прежнему не может обнаружить тестовый пример.

person casbby    schedule 15.08.2016