4

我的第一个 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 库。”

我究竟做错了什么?我只想从另一个文件中引用一个文件。

4

1 回答 1

5

您需要使用其完全限定名称(包括其命名空间)打开模块。所以LanguageMapper.Program你需要open LanguageMapper.Data.Data(只有最后一位是模块名称)。

编译器抱怨您的open定义,因为它只指定打开名为 Data 的命名空间或模块 - 它在 Microsoft.FSharp.Data 中找到一个,可能是因为 Microsoft.FSharp 命名空间有一些“自动”打开。

于 2012-11-11T17:32:12.490 回答