2012-11-11 125 views
2

我的第一個程序與F#。F#模塊/命名空間錯誤

我有一個文件,像這樣:

namespace LanguageMapper.Data 


#if INTERACTIVE 
#r "System.Data" 
#r "System.Data.Linq" 
#r "FSharp.Data.TypeProviders" 
#endif 

open System.Data 
open System.Data.Linq 
open Microsoft.FSharp.Data.TypeProviders 

module Data = 

    // You can use Server Explorer to build your ConnectionString. 
    type SqlConnection = Microsoft.FSharp.Data.TypeProviders.SqlDataConnection<ConnectionString = @"connstring"> 
    let db = SqlConnection.GetDataContext() 

然後,我有一個像這樣

namespace LanguageMapper.Program 

open Data 

module Program = 

[<EntryPoint>] 
let main argv = 


    let getLocale x = 
     match x with 
     | [|"live"|] -> "live" 
     | [|"dev"|] -> "dev" 
     | _ -> "local" 

open Data頂部另一個文件我得到一個紅色波浪在VS告訴我:

「錯誤1此聲明通過部分打開命名空間或模塊 'Microsoft.FSharp.Data'合格的路徑。調整 此代碼以使用命名空間的完整路徑。這一變化將使 你的代碼更健壯的新的結構將被添加到F#和CLI 庫。」

我到底做錯了什麼?我只是想從另一個引用一個文件。

回答

5

你需要使用它的全名,也就是包括其命名空間打開模塊。因此,在LanguageMapper.Program需要open LanguageMapper.Data.Data(僅最後一位是模塊名稱)。

編譯器抱怨你的open定義,因爲它僅指定打開名爲的名稱空間或模塊數據 - 並且它在Microsoft.FSharp.Data中找到一個,可能是因爲Microsoft.FSharp命名空間有一些「自動」打開。

+1

正是這樣,再加上我不得不手動重新安排項目文件中的文件順序,這裏指出的事實http://stackoverflow.com/questions/1608240/how-do-i-reference-types-in - 不同-F-文件。謝謝! – Micah