2010-12-06 69 views
3

我已經在Windows上下載了F#壓縮分發(即沒有安裝程序),並且在使用ExcelDna時遇到了困難。ExcelDna和獨立的F#安裝

當我將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> 

然而,它確實與該目錄中的動態鏈接庫的工作,並使用一個F#-compiled庫的引用,如:

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

其他語言(C#& VB)似乎做工精細。

有沒有人使用ExcelDna工具與壓縮的F#分佈?任何人都不知道什麼可能是錯的?

非常感謝您的幫助。

+0

嗨,你是否解決了這個問題到底 ? – nicolas 2013-01-21 19:55:15

回答

0

我建議你問一個DNA羣中的問題:Govert(ExcelDNA的作者)擅長回答。 http://groups.google.com/group/exceldna

+0

他建議使用StackOverflow,因爲他可能是大多數人使用的安裝程序。不過,我想避免編譯dll,並且不要求每個人都在他們的機器上安裝F#和powerpack。 – 123 2010-12-06 16:01:42

1

Excel DNA庫是否使用CodeDOM編譯F#代碼片段?

如果是,那麼您需要確保CodeDOM提供程序可以找到fsi.exe可執行文件(以便它可以調用它來執行編譯)。默認情況下,它使用一些註冊表設置,所以這可能是一個問題。您可以通過在CompilerLocationUntils.fs的源文件中查看BinFolderOfDefaultFSharpCompiler來查看解析的工作原理。

也許增加鍵fsharp-compiler-location到一些app.config(不知道哪一個應該雖然)可以工作。

或者,您可以嘗試編譯來源available at CodePlexFSharp.Compiler.CodeDom.dll並查看CodeDom提供程序是否被調用(以及哪些參數)。編譯這個單一的項目應該不難(創建新項目並在那裏複製源文件可能更容易,因爲CodePlex上提供的項目文件是自定義的,有點令人困惑)

+0

是的,我認爲問題來自那裏。它似乎從鱈魚ethat它可以與同一目錄中的其他文件(fsi ...),但顯然不是這樣...我會堅持編譯,而不是將代碼放入dna文件。但感謝您的幫助,至少我更好地理解了這個問題。 – 123 2010-12-10 10:35:43