No hay una función que permitirá hacer esto directamente. Sin embargo, cuando desee compilar programáticamente un archivo fuente F #, puede invocar el compilador F # desde su aplicación. La forma más fácil de hacerlo es usar el proveedor F # CodeDOM, que está disponible como parte de F # PowerPack (en el ensamblaje FSharp.Compiler.CodeDom.dll
). Sin embargo, tenga en cuenta que necesita tener el compilador F # instalado en la máquina del usuario.
El código para ejecutar el compilador se vería más o menos así:
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")
Una vez que se compila el archivo fuente en una asamblea, que tendrá que cargar el ensamblado utilizando la reflexión .NET y ejecutar alguna función específica o clase del ensamblado (puede, por ejemplo, buscar una función con algún nombre especial o marcada con algún atributo).
(Como nota al margen, utilizar citas o escribir su propio intérprete como se menciona en related SO question puede ser una opción si su código fuente es relativamente simple, pero probablemente no si desea admitir la potencia completa de F #)
posible duplicado de http://stackoverflow.com/questions/372043/how-can-evaluate-an-expression-stored-as-a-string-in-f – Brian
¿Desea cargar el código F # de esa ¿archivo? – phimuemue
Creo que esta publicación hace una pregunta un poco diferente (aunque técnicamente relacionada). El mencionado por Brian pregunta sobre expresiones simples, mientras que este pregunta sobre compilar/evaluar un archivo. Técnicamente, esto puede ser lo mismo, pero probablemente sea un caso de uso bastante diferente. –