我的第一个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,您的代码更加健壮 库“。
我做错了什么?我只想引用另一个文件。
答案 0 :(得分:5)
您需要使用其完全限定名称(包括其名称空间)打开模块。所以在LanguageMapper.Program
中你需要open LanguageMapper.Data.Data
(只有最后一位是模块名称)。
编译器抱怨你的open
定义,因为它只指定打开名为Data的命名空间或模块 - 它在Microsoft.FSharp.Data中找到一个,可能是因为有一些'自动'打开Microsoft.FSharp命名空间。