在FSharp.Core旁边找不到FSharp.Core.optdata

时间:2016-09-25 00:25:14

标签: f#

我有一个C#程序调用这个F#代码snipet。在执行let fsiSession时,我得到以下例外。这些site暗示了一些想法,但我不明白他们在说什么。我不知道在哪里找到了FSharp.Core.optdata。

namespace FsharpTestgSystem

open System
open System.IO
open System.Text

open System.CodeDom
open Microsoft.FSharp.Compiler.SourceCodeServices
open Microsoft.FSharp.Compiler.Interactive.Shell
open Microsoft.FSharp.Compiler.SimpleSourceCodeServices


type TestSystem() =
    // Intialize output and input streams
    // Build command line arguments & start FSI session
    let argv = [| "C:\\Program Files (x86)\\Microsoft SDKs\\F#\\4.1\\Framework\\v4.0\\fsi.exe" |]
    let allArgs = Array.append argv [|"--noninteractive"|]

    let sbOut = new StringBuilder()
    let sbErr = new StringBuilder()
    let inStream = new StringReader("")
    let outStream = new StringWriter(sbOut)
    let errStream = new StringWriter(sbErr)
    let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration()
    let fsiSession = FsiEvaluationSession.Create(fsiConfig, allArgs, inStream, outStream, errStream)

unknown(1,1): error FS1225: File '\bin\x64\Debug\FSharp.Core.optdata' not found alongside FSharp.Core
unknown(1,1): error FS0229: Error opening binary ...

3 个答案:

答案 0 :(得分:3)

我直接引用了下面的一些我写的实用程序需要这些名称空间中的东西:

C:\ Program Files(x86)\ Microsoft SDKs \ F#\ 4.0 \ Framework \ v4.0 \ FSharp.Compiler.Interactive.Settings.dll

可能您可以将对此文件的引用传递给使用额外参数生成的进程。请参阅 - 此处的参考:https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/compiler-options

注意:Fsi的命令参数与Fsc.exe的命令参数相同

答案 1 :(得分:3)

https://fsharp.github.io/FSharp.Compiler.Service/corelib.html有一个很好的教学页面,介绍如何处理FSharp.Core.optdata和FSharp.Core.sigdata文件。

答案 2 :(得分:0)

安装VS 2017后,我的旧项目出现此错误。修复它的原因是:

  • 备份所有文件。

  • 从nuget安装最新版本的FSharp.Core(恰好是4.2.1)

  • 在项目属性中:

    • 选择最新版本的F#作为目标运行时,恰好是4.4.1.0。
    • 选择.NET Framework 4.7作为目标框架。