如何在没有解决方案的情况下为F#脚本使用nuget安装包?

时间:2015-06-30 20:39:04

标签: f# nuget

我正在尝试编写F#脚本文件。所以我使用Visual studio" File-> New-> Files-> F#Script File"生成一个新的fsx文件。现在,我想通过打开包管理器控制台并输入

来添加对FSharpData的引用
private int index; // remember to reset this to 0 each time you change the  folder
private List<string> images;
private void Timer1_Tick(object sender, EventArgs e)
{
    index = (index + 1) % images.Length;
    pictureBox1.Image = Image.FromFile(images[index]);
}

但是我收到了以下错误。是否总是需要为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

3 个答案:

答案 0 :(得分:7)

有一个有趣的黑客,你可以在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的情况下完成所有工作。

答案 1 :(得分:4)

您可以直接使用nuget.exe而不是使用Visual Studio包管理器。这意味着您可以自由使用任何编辑器而不仅仅是Visual Studio。

作为示例,将NuGet.exe从任何其他项目复制到与.fsx相同的文件夹中,然后运行“Nuget.exe install package-name”

e.g。

NuGet.exe install FSharp.Data

Nuget将使用最新版本创建FSharp.Data文件夹。然后只需在添加的程序集和所有依赖项中添加#r。

答案 2 :(得分:0)

对于Linux用户,如果您的发行版是基于Debian的(使用Ubuntu 16.04测试),您可以在F#脚本中执行:

  1. 安装nuget软件包(如果尚未安装)(使用sudo apt install nuget)。
  2. 执行nuget install FSharp.Data -Version 2.3.2
  3. 通过#r行加载DLL(例如#r "FSharp.Data.2.3.2/lib/net40/FSharp.Data.dll)。
  4. 这样您就不需要从某个Web服务器下载.exe文件,感觉完全不安全。

    PS:请注意,你仍然会信任从(微软)Nuget服务器收到的库(二进制)。