2010-02-08 32 views
1

如果答案似乎很明顯,請原諒我。我創建了一個Visual Studio解決方案,併爲其添加了兩個項目,一個是F#庫(稱爲MathLibrary),另一個是C#前端(稱爲frontend,我知道我的創造力)。在C#項目中引用F#dll的麻煩

所以我在前端的項目,編制了MathLibrary DLL(確保)添加到MathLibrary DLL的引用,並試圖在我frontend項目中使用它。此時,我的編譯器抱怨說這是一個未定義的引用。我的理解是,添加適當的引用將允許我訪問我的DLL,但顯然我錯過了一個重要的步驟。

任何幫助?

+2

你從哪裏得到「未定義的參考」以及實際的錯誤消息是什麼?這聽起來像它可能是一個缺少的命名空間或什麼... – itowlson

+0

當我嘗試引用類或DLL.Class的方法,我得到「名稱'MathLibrary'不存在詮釋當前上下文 – tzenes

回答

1

在.fs文件的名稱和其中包含的名稱空間/模塊之間沒有實用性,除非您完全省略了任何名稱空間或模塊聲明;在這種情況下,編譯假定一個與該文件具有相同名稱的模塊。雖然我很高興你能夠編譯,但我認爲你沒有碰到實際的問題/解決方案。

0

它可能顯示爲Module1.SomeClass。 F#庫項目中的默認文件名爲Module1,如果您沒有使用namespacemodule聲明啓動源代碼文件,則可以在與模塊名稱相同的模塊中生成代碼。

您可以嘗試將namespace FsLib添加到定義某個類的F#庫代碼的頂部,然後查看FsLib.SomeClass是否可用於C#。

+0

好吧,我試過這個並沒有工作,在這一點上,我意識到.fs文件有一個不同的名稱,我用它的命名空間我不知道爲什麼該文件需要與名稱空間相同的名稱(因爲我可以有多個文件在同一個命名空間中),但這正是導致它正確編譯 – tzenes

+0

@tzenes,如果你找到了解決方案,考慮添加它作爲答案並接受它。 – Benjol

+2

@tzones:在.fs之間沒有實用性文件的名稱和其中的命名空間/模塊包含在內......除非完全忽略了任何命名空間或模塊聲明;在這種情況下,編譯假定模塊的名稱與該文件同名。能夠編譯,我認爲你沒有碰到實際的問題/解決方案。 – pblasucci

0

F#庫構建成功嗎?你可以看到DLL文件,並且如果你使用Reflector打開它,它是否包含任何類和名稱空間?在任何情況下,您還需要添加對FSharp.Core.dll(這是一個包含F#編譯器生成的任何dll引用的核心F#類型(如列表等)的庫的引用)。不過,如果你只是需要添加這個引用,我想你會得到的錯誤信息會有所不同。