2016-09-25 25 views
2

我有一個C#程序調用這個F#代碼snipet。在執行let fsiSession時,我得到下面的例外。這些site暗示了一些想法,但我不明白他們在說什麼。我不知道在哪裏找到了FSharp.Core.optdata。FSharp.Core.optdata沒有在FSharp上找到.Core

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 ... 
+0

這是說它應該在SDK目錄中。 [SO鏈接](http://stackoverflow.com/questions/21224314/what-are-fs-fsharp-core-optdata-and-fsharp-core-sigdata-files/)順便說一句,我能找到的唯一地方這個文件在Fake/tools中。 – s952163

回答

3

我把直接引用到下面的一些實用程序我寫了名字空間所需要的東西:

C:\ Program Files文件(x86)的\微軟的SDK \ F#\ 4.0 \框架\ V4 .0 \ FSharp.Compiler.Interactive.Settings.dll

也許您可以將對此文件的引用傳遞給正在生成額外參數的進程。參見 - 參考這裏:https://docs.microsoft.com/en-us/dotnet/articles/fsharp/language-reference/compiler-options

注:FSI中的命令參數往往是相同的Fsc.exe

+0

這似乎工作。謝謝。 – Ivan

0

我得到了我的老項目這個錯誤安裝VS 2017什麼固定它,我是後:

  • 使所有文件的備份。

  • 安裝從的NuGet最新版本FSharp.Core的(恰好是4.2.1現在)

  • 在項目屬性:

    • 選擇F#的最新版本作爲目標運行時,剛巧爲4.4.1.0。
    • 選擇.NET Framework 4.7作爲目標框架。