| File: Commands\Fsi\FsiForwardingApp.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using Microsoft.DotNet.Cli.Utils; namespace Microsoft.DotNet.Cli.Commands.Fsi; public class FsiForwardingApp(string[] arguments) : ForwardingApp(GetFsiAppPath(), processArguments(arguments)) { private const string FsiDllName = @"FSharp/fsi.dll"; private const string FsiExeName = @"FSharp/fsi.exe"; static string[] processArguments(string[] args) { var lang = UILanguageOverride.GetOverriddenUILanguage(); if (lang == null) { return args; } else { return [.. args, $"--preferreduilang:{lang.Name}"]; } } private static bool exists(string path) { try { return File.Exists(path); } catch { return false; } } /* * FSharp switched from compiling fsi.exe to fsi.dll which will allow us to ship an AppHost version of fsi.exe * The signal that fsi.exe is an apphost fs.exe is the presence of fsi.dll * * So here we look for fsi.dll, if it's found then we will return the path to it, otherwise we return fsi.exe * the reason for using this bridging mechanism is to simplify the coordination between F#/VS and the dotnet sdk */ private static string GetFsiAppPath() { var dllPath = Path.Combine(AppContext.BaseDirectory, FsiDllName); if (exists(dllPath)) { return dllPath; } else { return Path.Combine(AppContext.BaseDirectory, FsiExeName); } } }