Я хочу использовать библиотеку Math.NET Symbolics в проекте F #. Но когда я запускаю простой код:Совместимость .Net 4.0 и .Net 4.5. Не удалось загрузить файл или сборку «FSharp.Core, Version = 4.3.1.0».
open MathNet.Symbolics
open MathNet.Symbolics.Operators
...
let expr = Infix.parseOrThrow("sin(x) * y")
let symbols = Map.ofList [ "x", Real 2.0; "y", Real 3.0 ]
let res = Evaluate.evaluate symbols expr
У меня есть:
Could not load file or Assembly ' FSharp.Core, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" or one of the dependent components. The system cannot find the file specified.
Я создал тему на форуме Math.NET
В ходе обсуждения , Я думал, что это невозможно, потому что у меня только .Net 4.5 и VS2012 (поэтому я не может использовать F # 3.1).
Но я не могу понять, если все работает в .Net 4.0, почему я не могу нормально использовать в .Net 4.5. Что относительно версии совместимости?
Вопрос: возможно ли это? И, если возможно, как?
Edit:
Когда app.config имеет:
<bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
<bindingRedirect oldVersion="2.3.5.0" newVersion="4.3.0.0" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="4.3.0.0" />
Этот код работает отлично:
let symbols = Map.ofList [ "x", Real 2.0; "y", Real 3.0 ]
let x = symbol "x"
let y = symbol "y"
let res = Evaluate.evaluate symbols (sin(x) * y)
Но мне нужно использовать анализатор для математических выражений. Поэтому этот вариант мне не подходит.
Update:
Ответ:
После неудачной компиляции Visual Studio была изменена ссылкой на FSharp.Core из папки пакета на стандартном FSharp.Core 4.3.0.0. Когда я установил свойство «Копировать локальное» = «true» - проблема была решена.
Теперь код
let expr = Infix.parseOrThrow("sin(x) * y")
let symbols = Map.ofList [ "x", Real 2.0; "y", Real 3.0 ]
let res = Evaluate.evaluate symbols expr
дает еще одно исключение:
System.TypeInitializationException: The type initializer for '<StartupCode$MathNet-Symbolics>.$Infix'
threw an exception. ---> System.Security.VerificationException: Operation could destabilize the runtime
Я искал ошибку, когда он не был. Проблема не в зависимости. Потому что код без использования FParces работал!
On the page for the package записывается следующим образом:.
«Этот пакет использует базовое„низкое доверие“конфигурацию FParsec, , которая не использует никакого непроверяемый код и оптимизирован для максимальной переносимости Если вам нужно для синтаксического анализа очень больших файлов или если вы используете FParsec для высокопроизводительных заданий, подумайте об использовании альтернативного пакета NuGet «Big Data Edition» (см. nuget.org/packages/fparsec-big-data-edition)."
Итак, я изменил FParsec на FParsec (Big Data Edition) и все работает
PS Мои попытки изменить переплета редирект не имеет смысла =) просто написать:
<bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
https://fsharp.github.io/2015/04/18/fsharp-core-notes.html –
@Hans Passant, я прочитал его несколько раз. И посмотрел другие подобные вопросы на SO. Извините, но я не могу понять, как я могу помочь в этой информации. –
Какая версия 'FSharp.Core' * do * у вас есть? –