fsharp icon indicating copy to clipboard operation
fsharp copied to clipboard

FsiEvaluationSession cant find Fsharp.Core when hosted in another process.

Open goswinr opened this issue 3 years ago • 0 comments

Problem

The constructor of FsiEvaluationSession cant find Fsharp.Core when FCS is hosted in another process. I used v40.0 but this problem probably existed since FCS 34.0. see https://github.com/dotnet/fsharp/issues/9064 When FCS is hosted in another app ( Rhino3d in my case) the directory at Directory.GetCurrentDirectory() in fsi.fs probably does not contain FSharp.Core.dll. A non-descriptive StopProcessingExn is raised.

The useful information about the problem is not in the exception, but only in the FSI error stream:

error FS0078: Unable to find the file 'FSharp.Core.dll' in any of
 C:\Windows\Microsoft.NET\Framework64\v4.0.30319
 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\WPF
 C:\Program Files\Rhino 7\System
 C:\Program Files\Rhino 7\System\

Workaround

The workaround is to set the current directory to the location of FSharp.Core.dll before calling FsiEvaluationSession.Create(...) for example via: Directory.SetCurrentDirectory(Path.GetDirectoryName(Reflection.Assembly.GetAssembly([].GetType()).Location)) It took me one year, two other issues on this repo, and the reading of the now more descriptive FSI error stream (since 40.0) in addition to the exception, to understand what the problem was and find this workaround.

goswinr avatar Jul 02 '21 09:07 goswinr