我已经在Windows上下载了F#压缩发行版(即,没有安装程序),并且很难将ExcelDna与它一起使用。

当我将FSharp.Core.dll和Powerpack文件复制到ExcelDna文件的目录(xxx.dna和xxx.xll),并在dna文件中使用代码(参见下文)时,它不起作用(尽管在那里是没有错误信息)。

<DnaLibrary Name="FSharp Sample" Language="F#">
    <![CDATA[

    namespace Foo

    module Bar =

      open ExcelDna.Integration
      let sayhello () = "Hello from F#"

      [<ExcelFunction(Category="FSharp Functions", Description="FSharp function to add numbers")>]
      let add x y = x + y

      let rec factorial = function
        | x when (x > 1.0) -> (floor x) * factorial (x - 1.0)
        | _ -> 1.0

    ]]>
</DnaLibrary>


但是,它可以使用目录中的dll并使用对F#编译的库的引用,如:

<DnaLibrary>
    <ExternalLibrary Path="MyExcelDna.dll" />
</DnaLibrary>


其他语言(C#和VB)似乎工作正常。

有没有人使用带有压缩F#发行版的ExcelDna工具?会有人知道怎么了吗?

非常感谢您的帮助。

最佳答案

Excel DNA库是否使用CodeDOM来编译F#代码段?

如果是,那么您需要确保CodeDOM提供程序可以找到fsi.exe可执行文件(以便它可以调用它来进行编译)。默认情况下,它使用某些注册表设置,因此这可能是一个问题。您可以通过查看CompilerLocationUntils.fs中来源中的BinFolderOfDefaultFSharpCompiler来查看分辨率的工作原理。

也许将键fsharp-compiler-location添加到某些app.config(不确定应该是哪个键)可以工作。

或者,您可以尝试从源available at CodePlex编译FSharp.Compiler.CodeDom.dll,并查看是否调用了CodeDom提供程序(以及使用了哪些参数)。编译单个项目应该不难(创建新项目并在其中复制源文件可能会更容易,因为CodePlex上可用的项目文件是自定义的,有点令人困惑)

关于excel - ExcelDna和独立F#安装,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4365643/

10-12 03:05