我在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?
答案 0 :(得分: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放在不同的目录中,因此fsharpi
找不到它们仍然没有单一的位置。 (b)无论如何fsharpi
并不尊重$MONO_PATH
,Mono的规范方式来添加到DLL搜索路径。
我最接近fsharpi
的可行解决方案是:
每当你想要一个包时,手动将它添加到MONO_PATH(例如,在~/.profile
中)。例如,假设你告诉nuget把东西放进/opt/nuget
你会添加:
export MONO_PATH = $ MONO_PATH:/opt/nuget/MySql.Data.6.8.3/lib/net45
每当您运行fsharpi
时,请明确提供$MONO_PATH
:
fsharpi -I:$ MONO_PATH
如果您有冒险精神,可以修补fsharpi
脚本以自动加入$MONO_PATH
。
我发现这不值得付出努力。简单地构建一个脚本,使用您当前正在处理的任何选项启动fsharpi
是一个更实用的解决方案。
我是Mac上的F#程序员。我的生活就像是对已婚人士的非法恋情:我忍受所有的小琐事,因为我的心让我别无选择。
答案 1 :(得分:4)
我看到的最常见用途是
mono nuget.exe install mysql.data -OutputDirectory packages -ExcludeVersion
哪个会安装在你项目的目录中(通常你会忽略你的存储库中的packages目录,然后只用脚本恢复它),然后你就可以在packages/MySql.Data/lib/net45
找到它
将nuget下载到您的存储库也很常见。
您总是可以编写自己的脚本来执行您想要的fsharpi连接,nuget有很多约定,因此可以从lib/*/
为您的目的选择正确的dll
可以使用fsharp脚本执行此操作,这里可以直接执行fsx script,下载nuget,从nuget安装,然后执行另一个脚本(使用fake
不是fsharpi
,但这完全有可能。