2016-01-06 4 views
2

Я хочу использовать библиотеку 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" /> 
+2

https://fsharp.github.io/2015/04/18/fsharp-core-notes.html –

+0

@Hans Passant, я прочитал его несколько раз. И посмотрел другие подобные вопросы на SO. Извините, но я не могу понять, как я могу помочь в этой информации. –

+0

Какая версия 'FSharp.Core' * do * у вас есть? –

ответ

3

If Math. NET была составлена ​​против 4.3.1.0, и вы застряли с Visual Studio 2012, которая поставляется с 4.3.0.0, у вас есть два варианта, о которых я могу думать:

  • Захватите исходный код Math.NET, измените его на целевой 4.3.0.0 и скомпилируйте его.
  • Install F# 3.1 into VS 2012

Но вы должны действительно думать о модернизации.

+0

Спасибо. К сожалению, у меня нет возможности обновить Visual Studio. Я нашел ответ на свой вопрос, не перекомпилируя Math.Net. –

+0

Поскольку в Visual Studio не стоит устанавливать более новую версию F #, и ничего не стоит загружать Community Edition VS 2015, я должен предположить, что ваш работодатель не позволяет вам использовать инструменты, необходимые для выполнения вашей работы. Это не отражается на вашем работодателе. –

+0

На данный момент программирование для меня - это только хобби. У меня нет возможности обновлять Windows7, что позволит установить хотя бы VS2013. Но я планирую сделать это в конце месяца. Хотя, конечно, обновление создает дополнительные трудности. –