![](/img/trans.png)
[英]F# error 'error FS0039: The namespace or module 'MySql' is not defined'?
[英]Why am I getting F# error FS0039: The namespace or module 'Http' is not defined
在Visual Studio 2015和2017中,我正在FSharp Interactive的几个F#示例中尝试Http类,并且不断得到:
错误FS0039:未定义名称空间或模块'Http'
这是示例:
open FSharp.Data
let response = Http.RequestString("http://api.themoviedb.org/3/search/movie", silentHttpErrors = true)
这显然是由于FSharp.Data的版本。 有没有办法为FSharp Interactive指定正确的版本? 哪个版本的FSharp.Data包含Http模块?
根据评论,我整理了一个脚本来安装Paket,对其进行初始化,然后在运行脚本时有选择地安装依赖项。
/// install.paket.fsx
open System
open System.IO
printfn "Initialising..."
Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
// invisibly run a command (paket.exe in this case)
let init paket =
let psi = new System.Diagnostics.ProcessStartInfo(paket)
psi.Arguments <- "init"
psi.UseShellExecute <- false
let p = System.Diagnostics.Process.Start(psi)
p.WaitForExit()
p.ExitCode
if not (File.Exists "paket.exe") then
printfn "installing paket"
let url = "http://fsprojects.github.io/Paket/stable"
use wc = new Net.WebClient()
let tmp = Path.GetTempFileName()
let stable = wc.DownloadString(url)
wc.DownloadFile(stable, tmp)
File.Move(tmp,Path.GetFileName stable)
printfn "paket installed"
System.Threading.Thread.Sleep(100)
printfn "initialising paket"
init "paket.exe" |> ignore
System.Threading.Thread.Sleep(200)
printfn "paket initialised"
else
printfn "paket already exists"
/// install.dependencies.fsx
open System.IO
printfn "Installing dependencies"
System.Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
#r "paket.exe"
open Paket
let dependencies = Paket.Dependencies.Locate(__SOURCE_DIRECTORY__)
printfn "%s" dependencies.DependenciesFile
if not (File.Exists "packages/Newtonsoft.Json/lib/net40/Newtonsoft.Json.dll") then
printfn "installing nuget depenencies"
// either use the dependencies.Install to add dependencies in the paket.dependencies file
//dependencies.Install true |> ignore
// or install them by name
// I remove the existing versions
dependencies.Remove "FSharp.Data"
dependencies.Remove "Newtonsoft.Json 8.0.3"
// then add them (because I'm pedantic about the way the dependencies file looks)
dependencies.Add "FSharp.Data"
dependencies.Add "Newtonsoft.Json 8.0.3"
printfn "nuget depenencies installed"
else
printfn "nuget depenencies already exist"
printfn "Dependencies installed"
请注意,Newtonsoft.Json使用8.0.3,最新版本带来了20多个附加依赖项,因此我发现了一个很好的旧版本,该版本非常自包含。 如果需要最新版本,可以省略版本号。
然后,我在共享的Utility.fsx中使用这些脚本来实现可重用的功能
System.Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
#load "install.paket.fsx"
#load "install.dependencies.fsx"
#r "packages/fsharp.data/lib/net40/fsharp.data.dll"
#r "packages/Newtonsoft.Json/lib/net40/Newtonsoft.Json.dll"
open FSharp.Data
open FSharp.Data.HtmlAttribute
open FSharp.Data.HtmlNode
open FSharp.Data.HttpRequestHeaders
open Newtonsoft.Json
open System.Net
open System.IO
// utilities like authentication, Http requests and JSON (de)serialization
最后,通过加载实用程序,我在目标脚本中引用了很多内容:
System.Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
#load "utilities.fsx"
open Utilities
照顾所有的依赖。 这些可以从Visual Studio中使用Alt
+ Enter
键组合来运行,也可以从命令行中使用fsi.exe MyScript.fsx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.