Нет функции, которая позволила бы вам сделать это напрямую. Однако, если вы хотите скомпилировать исходный файл F # программно, вы можете вызвать компилятор F # из своего приложения. Самый простой способ сделать это - использовать провайдера F # CodeDOM, который доступен как часть F # PowerPack (в сборке FSharp.Compiler.CodeDom.dll
). Однако учтите, что на компьютере пользователя должен быть установлен компилятор F #.
Код для запуска компилятора будет выглядеть примерно так:
open Microsoft.FSharp.Compiler.CodeDom
let provider = new FSharpCodeProvider()
let compiler = provider.CreateCompiler()
let parameters = new CompilerParameters
(GenerateExecutable = true, OutputAssembly = "file.exe")
let results = icc.CompileAssemblyFromFile(parameters, "filename.fs")
Как только вы скомпилируете исходный файл в сборку, вам нужно будет загрузить сборку с помощью .NET Reflection и запустить какую-то определенную функцию или класс из сборки (вы можете, например, найти функцию с некоторым специальным именем или помеченной с некоторым атрибутом).
(Как примечание, использование цитат или написание собственного интерпретатора, как указано в связанном вопросе SO может быть вариантом, если ваш исходный код относительно прост, но, вероятно, нет, если вы хочу поддерживать всю мощь F #)