我在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工具?有人会知道可能出现什么问题吗?
非常感谢你的帮助。
答案 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