在MacOS命令行上使用Nuget安装软件包?

3

我正在尝试在OS X上使用F#,但是我在安装程序包时遇到了问题。我的问题是要使用MySQL。

我已经下载了Nuget并可以启动它。但是,我没有找到有关如何在命令行上使用它的任何有用文档。

我成功地安装了MySQL.Data,方法如下:

mono nuget.exe install MySql.Data

它将其下载到了我的当前存储库中,这是正常的吗?我原以为它会被“安装”到更集中的目录中。

此外,当我尝试需要它时,r "MySql.Data 它不起作用。如果我通过正确设置包含路径来解决它,就能起作用:

fsharpi --lib:MySql.Data.6.8.3/lib/net45

但是这似乎非常繁琐。有没有一种方法可以自动将所有已安装的 NuGet 添加到路径中呢?

2个回答

6

简短回答:不行。

详细回答:可以,但并不是你所期望的那样。

可以让NuGet将已安装的库放在特定位置。在Mac OS上,在~/.config/NuGet/NuGet.Config文件末尾添加以下内容:

<configuration>
  <config>
      <add key="repositoryPath" value="/path/to/where/you/want/it/to/go" />
  </config>
</configuration>

然而,(a) NuGet仍将DLL文件放在不同的目录中,因此没有单一的位置供查找它们。(b) 无论如何都不会尊重$MONO_PATH,这是Mono添加到DLL搜索路径的规范方式。
我找到了一个适用于的可行解决方案:
1.每次NuGet软件包时,手动将其添加到MONO_PATH(例如,在~/.profile中)。例如,假设您告诉NuGet将文件放在/opt/nuget中,则应添加: export MONO_PATH=$MONO_PATH:/opt/nuget/MySql.Data.6.8.3/lib/net45
2.每次运行时,明确地使用$MONO_PATH参数: fsharpi -I:$MONO_PATH
如果您感到有冒险精神,可以修补脚本以自动包含$MONO_PATH。
我发现这不值得去做。构建一个启动带有所需选项的脚本是一个更实用的解决方案。
我是一名Mac上的F#程序员。我的生活就像与已婚人士私奔的禁恋:我忍受所有小小的侮辱,因为我的心让我别无选择。

4
我看到最常见的用途是:
mono nuget.exe install mysql.data -OutputDirectory packages -ExcludeVersion

这将安装在你项目的目录中(通常情况下,你会忽略仓库中的packages目录,并使用脚本来还原它),然后你就可以在packages/MySql.Data/lib/net45找到它。

将NuGet下载到你的仓库也很常见。

你总是可以编写自己的脚本来完成想要的fsharpi hookups,NuGet有很多约定,因此可能需要从lib/*/中挑选合适的dll以满足你的需求。

而且,可以使用一个fsharp脚本来完成,这里有一个fsx脚本,可以直接执行它,它会下载NuGet,从NuGet安装,然后执行另一个脚本(使用fake而不是fsharpi,但完全可行)。


NuGet 有很多约定是什么意思?我能把 MONO_PATH 设置为 lib/*/ 或者类似的东西吗(我尝试过了,但不起作用)? - mb14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接