FSharp.Compiler.Service编译成dll时出错

10

我目前正在开展一个项目,为F#实现变异测试。为了访问FCS进程,我使用了FSharp.Compiler.Service包。

我在编译过程和已编译的DLL方面遇到了一些麻烦。

我正在使用FSharp.Compiler.Service将一个项目的AST编译成:

  • 一个dll。另一个程序引用此dll。当在Visual Studio中编译时,一切正常。当使用编译器服务从AST中编译时,每次调用都会出现方法未找到的异常。

  • 一个可执行的dll。然而,我总是得到“entrypoint不是最后一个声明”的错误。当检查我传递给编译的内容时,entrypoint AST是列表中的最后一个AST,而entrypoint节点是AST中的最后一个节点。在Visual Studio中编译时没有问题。

有人遇到过这些问题吗?或者知道修复我遇到的错误的方法吗?

2个回答

3

我已经做过这个很多次。当您尝试编译时,您可能想发布输入参数是什么,输入中缺少某些内容通常是错误的原因。


这是我的当前方法:{ Tuple result = FSharpAsync.RunSynchronously( checker.Compile( trees, AssemblyName, pathlist.First(), dependencies, null, true, rue, null), null, null); return (result.Item2 == 0, result.Item1); }``` 我已经尝试过使用pdb,但似乎没有什么区别。 - dukedagmor
1
我的意思是这种类型的输入:https://github.com/7sharp9/soothsayer/blob/master/soothsayer/soothsayer.fs#L27-L39 - 7sharp9
在使用AST时,我不知道有什么办法将它们提供给编译函数。 - dukedagmor
@7sharp9 我们不是从fsharp编译器服务获取输入,而是从一个名为Buildalyzer的工具获取所有输入。您认为一些AST或引用可能会丢失吗? - Mobrockers
我从未听说过 Buildalyzer,抱歉。 - 7sharp9
我会手动构建您认为应该的输入,将Buildalyzer从方程式中移除。没有任何参考代码,很难提出许多建议。 - 7sharp9

2

从FSharp.Compiler.Service 37升级到38后,已解决methodnotfound错误。

在包含入口点的语法树中将islastcompiled硬编码为Tuple(true,true)以解析输入(语法树)中的错误不会触发。

islstcompiled解决方案不太可靠,我希望有更好的方法来解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接