如何在没有解决方案的情况下为 F# 脚本使用 nuget 安装包?
How to use nuget install package for F# script without a solution?
我正在尝试编写 F# 脚本文件。所以我使用 Visual studio "File->New->Files->F# Script File" 来生成一个新的 fsx 文件。现在我想通过打开包管理器控制台并输入
添加对 FSharpData 的引用
Install-Package FSharp.Data
但是我得到了以下错误。是否总是需要为 F# 脚本文件创建解决方案?
Install-Package : The current environment doesn't have a solution open.
At line:1 char:1
+ Install-Package FSharp.Data
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Install-Package], InvalidOperationException
+ FullyQualifiedErrorId : NuGetNoActiveSolution,NuGet.PowerShell.Commands.InstallPackageCommand
自 2019 年底以来,现在原生支持:
#r "nuget: Suave"
#r "nuget: FSharp.Data"
#r "nuget: FSharp.Charting"
原回答:
suave.io 网站上记录了一个有趣的技巧,您可以执行该技巧,它会下载 Paket,然后使用它来下载软件包 - 所有这些都在脚本文件中的几行中完成:
// Step 0. Boilerplate to get the paket.exe tool
open System
open System.IO
Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
if not (File.Exists "paket.exe") then
let url = "https://github.com/fsprojects/Paket/releases/download/0.31.5/paket.exe"
use wc = new Net.WebClient()
let tmp = Path.GetTempFileName()
wc.DownloadFile(url, tmp)
File.Move(tmp,Path.GetFileName url)
// Step 1. Resolve and install the packages
#r "paket.exe"
Paket.Dependencies.Install """
source https://nuget.org/api/v2
nuget Suave
nuget FSharp.Data
nuget FSharp.Charting
""";;
对我来说有点长,但它可以让您在不离开脚本文件和 F# Interactive 的情况下完成所有事情。
新的开箱即用的方法是将其添加到您的 .fsx 脚本中:
#r "nuget: FSharp.Data, Version=3.3.3"
(The PR that implemented this, for reference; and the release 此处揭晓。)
旧答案:
对于那里的 Linux 用户,如果您的发行版是基于 Debian 的(使用 Ubuntu 16.04 测试过),您可以在 F# 脚本中执行:
- 安装
nuget
软件包(如果尚未安装)(使用 sudo apt install nuget
)。
- 做
nuget install FSharp.Data -Version 2.3.2
.
- 通过
#r
行(例如 #r "FSharp.Data.2.3.2/lib/net40/FSharp.Data.dll
)加载 DLL。
这样你就不需要从一些网络服务器上下载 .exe 文件了,感觉完全不安全。
PS:请注意,您仍然会信任从(Microsoft 的)Nuget 服务器收到的库(二进制)。
我正在尝试编写 F# 脚本文件。所以我使用 Visual studio "File->New->Files->F# Script File" 来生成一个新的 fsx 文件。现在我想通过打开包管理器控制台并输入
添加对 FSharpData 的引用Install-Package FSharp.Data
但是我得到了以下错误。是否总是需要为 F# 脚本文件创建解决方案?
Install-Package : The current environment doesn't have a solution open. At line:1 char:1 + Install-Package FSharp.Data + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Install-Package], InvalidOperationException + FullyQualifiedErrorId : NuGetNoActiveSolution,NuGet.PowerShell.Commands.InstallPackageCommand
自 2019 年底以来,现在原生支持:
#r "nuget: Suave"
#r "nuget: FSharp.Data"
#r "nuget: FSharp.Charting"
原回答:
suave.io 网站上记录了一个有趣的技巧,您可以执行该技巧,它会下载 Paket,然后使用它来下载软件包 - 所有这些都在脚本文件中的几行中完成:
// Step 0. Boilerplate to get the paket.exe tool
open System
open System.IO
Environment.CurrentDirectory <- __SOURCE_DIRECTORY__
if not (File.Exists "paket.exe") then
let url = "https://github.com/fsprojects/Paket/releases/download/0.31.5/paket.exe"
use wc = new Net.WebClient()
let tmp = Path.GetTempFileName()
wc.DownloadFile(url, tmp)
File.Move(tmp,Path.GetFileName url)
// Step 1. Resolve and install the packages
#r "paket.exe"
Paket.Dependencies.Install """
source https://nuget.org/api/v2
nuget Suave
nuget FSharp.Data
nuget FSharp.Charting
""";;
对我来说有点长,但它可以让您在不离开脚本文件和 F# Interactive 的情况下完成所有事情。
新的开箱即用的方法是将其添加到您的 .fsx 脚本中:
#r "nuget: FSharp.Data, Version=3.3.3"
(The PR that implemented this, for reference; and the release 此处揭晓。)
旧答案:
对于那里的 Linux 用户,如果您的发行版是基于 Debian 的(使用 Ubuntu 16.04 测试过),您可以在 F# 脚本中执行:
- 安装
nuget
软件包(如果尚未安装)(使用sudo apt install nuget
)。 - 做
nuget install FSharp.Data -Version 2.3.2
. - 通过
#r
行(例如#r "FSharp.Data.2.3.2/lib/net40/FSharp.Data.dll
)加载 DLL。
这样你就不需要从一些网络服务器上下载 .exe 文件了,感觉完全不安全。
PS:请注意,您仍然会信任从(Microsoft 的)Nuget 服务器收到的库(二进制)。