fsharp
fsharp copied to clipboard
FsiEvaluationSession cant find Fsharp.Core when hosted in another process.
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.