Веселюсь с компиляцией в рантайме. Похоже она нынче не поддерживается, что же теперь делать, если надо.
В compile_file CodeCompiler() конструктора банально нет, или я что-то совсем не понимаю.
В compile_file2 ещё лучше - в строке
let res = pro.CompileAssemblyFromFile(opt, path)
module Test
let sum a b = a + b
module TestLoader
open System.IO
open System.CodeDom.Compiler
open Microsoft.FSharp.Compiler.CodeDom
open InternalDSLTypes
open InternalDSL
open Sunbox
open CheckFunctions
open System.CodeDom.Compiler
type System.CodeDom.Compiler.ICodeCompiler with
member this.CompileAssemblyFromFile
(options:CompilerParameters,fileName:string) : CompilerResults =
this.CompileAssemblyFromFileBatch(options, [|fileName|])
(*
let compile_file str assemblies output =
let pro = new System.CodeDom.Compiler.CodeCompiler()
let opt = CompilerParameters(assemblies, output)
let res = pro.CompileAssemblyFromFile(opt, str)
if res.Errors.Count = 0 then
Some(FileInfo(res.PathToAssembly))
else None
*)
let compile_file2 path use_asms output =
use pro = new FSharpCodeProvider()
let opt = CompilerParameters(use_asms, output)
let res = pro.CompileAssemblyFromFile(opt, path)
if res.Errors.Count = 0
then Some(FileInfo(res.PathToAssembly))
else None
let path = "D:/Sources/ATProjectChecker/ATProjectChecker/tests/test2.fs"
let out = "D:/Sources/ATProjectChecker/ATProjectChecker/tests/test.dll"
let asms = [||]
let res = compile_file2 [|path|] asms out