ExcelDna&独立的F#安装

时间:2010-12-06 10:57:15

标签: excel f# excel-dna

我在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工具?有人会知道可能出现什么问题吗?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

可能会将密钥fsharp-compiler-location添加到某些app.config(不确定哪一个应该是这样)。

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

答案 1 :(得分:0)

我建议你在其中一个DNA小组中提出这个问题:Govert(ExcelDNA的作者)善于回答。 http://groups.google.com/group/exceldna