我在学习F#,以前从未使用过任何网络或单声道。我喜欢这门语言,但是我很难掌握无数的运行时版本,以及如何告诉各种工具使用哪个版本。
总结:
似乎Ubuntu上的DLL地狱是个东西。我怎么知道
FSAC
对最新的运行时版本运行其自动完成的魔术,即Microsoft.NETCore.App应用程序2.1.5,而不是它决定使用的任何旧的化身?
冗长的解释。
我的平台是ubuntu18.04amd64。我已经安装了最新的DotNet核心,特别是软件包
dotnet-sdk-2.1
2.1.403-1
)及其依赖关系
dotnet-host
dotnet-runtime-2.1
等(都是版本
2.1.5-1
). 我还安装了Mono,因为许多工具显然依赖它。
当我尝试使用最近添加到dotnetcore的一些特性时,感觉就像在揭开潘多拉魔盒。
以这个例子为例,它使用新的
ProcessStartInfo.ArgumentList
:
#r "System.Diagnostics.Process.dll"
open System.Diagnostics
let execute exe args =
let proc = new Process()
proc.StartInfo.FileName <- exe
for arg in args do proc.StartInfo.ArgumentList.Add arg
proc.Start() |> ignore
proc.WaitForExit()
execute "echo" ["foo"; "baz"]
/usr/bin/fsharpi
(哪个执行官
/usr/bin/mono /usr/lib/mono/fsharp/fsi.exe
)我得到一个“ArgumentList is not defined”错误。够公平吧?
如果我和你一起跑的话
/usr/bin/dotnet /usr/share/dotnet/sdk/2.1.403/FSharp/fsi.exe
我花了很长时间才发现我甚至可以做到,但我终于走上了正确的道路。
ArgumentList
无效。Sublime的插件还标记
#r
专注于Sublime的插件并深入挖掘代码,它似乎依赖于一个名为
FsAutoComplete aka. fsac
在Linux上
explicitly invokes it with mono
.
我尝试用DotNet Core运行FSAC工具,但找不到任何库或其他库:
$ cd .config/sublime-text-3/Packages/FSharp/fsac/fsac/
$ dotnet fsautocomplete.exe
A fatal error was encountered. The library 'libhostpolicy.so' required to execute the application was not found in '/home/tobia/.config/sublime-text-3/Packages/FSharp/fsac/fsac/'.
Failed to run as a self-contained app. If this should be a framework-dependent app, add the /home/tobia/.config/sublime-text-3/Packages/FSharp/fsac/fsac/fsautocomplete.runtimeconfig.json file specifying the appropriate framework.
System.Diagnostics.Process.dll
,我对结果感到困惑:
/usr/lib/mono/4.5/Facades/System.Diagnostics.Process.dll
/usr/lib/mono/4.7.1-api/Facades/System.Diagnostics.Process.dll
/usr/lib/mono/xbuild/Microsoft/Microsoft.NET.Build.Extensions/net461/lib/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/2.1.403/Microsoft/Microsoft.NET.Build.Extensions/net461/lib/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/microsoft.netcore.app/2.1.0/ref/netcoreapp2.1/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/netstandard.library/2.0.3/build/netstandard2.0/ref/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/lib/net46/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/lib/net461/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/ref/net46/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/ref/net461/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/ref/netstandard1.3/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/ref/netstandard1.4/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/runtimes/linux/lib/netstandard1.4/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/runtimes/osx/lib/netstandard1.4/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/runtimes/win/lib/net46/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/runtimes/win/lib/net461/System.Diagnostics.Process.dll
/usr/share/dotnet/sdk/NuGetFallbackFolder/system.diagnostics.process/4.3.0/runtimes/win/lib/netstandard1.4/System.Diagnostics.Process.dll
/usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.5/System.Diagnostics.Process.dll
再加上一打在我的家庭目录下
~/.nuget
. 太疯狂了。
首先,整个
/usr/share/dotnet/sdk/NuGetFallbackFolder
子树
似乎不属于任何Deb软件包,
mono-devel: /usr/lib/mono/4.5/Facades/System.Diagnostics.Process.dll
mono-devel: /usr/lib/mono/4.7.1-api/Facades/System.Diagnostics.Process.dll
msbuild: /usr/lib/mono/xbuild/Microsoft/Microsoft.NET.Build.Extensions/net461/lib/System.Diagnostics.Process.dll
dotnet-sdk-2.1: /usr/share/dotnet/sdk/2.1.403/Microsoft/Microsoft.NET.Build.Extensions/net461/lib/System.Diagnostics.Process.dll
(*) dotnet-runtime-2.1: /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.5/System.Diagnostics.Process.dll
(*)
知道什么吗
论据列表
所以其他所有的库都是旧的/遗留的版本,
包括那个
它自己。
采取过程方法,
lsof
/usr/lib/mono
从它自己的本地目录。这是不可能的。
有没有办法告诉FSAC使用Microsoft.NETCore.App应用程序2.1.5运行时/系统库的自动完成和linting工作?