FSharp.Compiler.Service compile to dll errors
Asked Answered
H

2

10

I am currently working on a project to implementing mutation-testing for F#. To access the FCS process I am using the FSharp.Compiler.Service package.

I am having some trouble with the compilation process and the compiled DLL.

I'm using FSharp.Compiler.Service to compile a project's AST's to

  • a dll. Another program references this dll. When compiled in visual studio everything works. When compiled from the AST's using compiler services I get method not found exceptions on every call.

  • an executable dll. However I always get the error entrypoint is not the last declaration. When inspecting what I pass to the compilation the entrypoint AST is the last AST in the list, and the entrypoint node is the last node in the AST. When compiling in visual studio there are no issues.

Has anyone encountered these issues before? Or knows a way to fix the errors I’m getting?

Homeward answered 20/11, 2020 at 11:28 Comment(0)
N
3

I have done this many times. You might want to post what the input arguments are when you are trying to compile, the lack of something in the input is often the cause for an error.

Nansen answered 20/11, 2020 at 17:21 Comment(6)
this is my current method: private (bool, FSharpErrorInfo[]) TryCompilation(FSharpChecker checker, FSharpList<ParsedInput> trees, List<string> pathlist, FSharpList<string> dependencies , List<string> pdblist) { Tuple<FSharpErrorInfo[], int> result = FSharpAsync.RunSynchronously( checker.Compile( trees, AssemblyName, pathlist.First(), dependencies, null, true, rue, null), null, null); return (result.Item2 == 0, result.Item1); } I've tried it with pdb but that doesn't seem to make a differenceHomeward
I meant like these type inputs: github.com/7sharp9/soothsayer/blob/master/soothsayer/…Nansen
there is no way to give those to the compile function when using AST (that I am aware of)Homeward
@Nansen We don't get our inputs from fsharp compiler services, we get all our inputs from a tool called Buildalyzer. Do you think some of the AST's or references might by missing?Exchequer
I have never heard of Buildalyzer sorry.Nansen
What I would do is manually build up what you think the inputs should be, removing Buildalyzer from the equation. Without any reference code its difficult to make many suggestions.Nansen
H
2

Updating from FSharp.Compiler.Service 37 to 38 has resolved the methodnotfound error

By hardcoding the islastcompiled in the parsedinput (syntaxtree) to Tuple(true,true) in the syntaxtree containing the entrypoint, the error doesn't trigger.

The islastcompiled solution is sketchy and I would like to have a better way to do this.

Homeward answered 27/11, 2020 at 8:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.