3

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

非常感谢您的帮助。

4

2 回答 2

1

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

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

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

或者,您可以尝试从CodePlex 提供FSharp.Compiler.CodeDom.dll的源代码编译,并查看 CodeDom 提供程序是否被调用(以及使用哪些参数)。只编译这个单个项目应该不难(创建新项目并在那里复制源文件可能更容易,因为 CodePlex 提供的项目文件是定制的并且有点混乱)

于 2010-12-06T16:28:10.510 回答
0

我建议您在其中一个 DNA 组中提问:Govert(ExcelDNA 的作者)擅长回答。 http://groups.google.com/group/exceldna

于 2010-12-06T14:34:12.350 回答