我确信这一定非常简单,但我似乎无法使其发挥作用.假设我有一个.fsx脚本文件,并希望以编程方式执行它.我猜想有人必须在某个时候写过关于此的博客,但我似乎无法找到一个执行我简单场景的例子.基本上,我想以编程方式复制右键单击.fsx文件并选择"使用F#Interactive运行..."时发生的情况.
使用F#2.0和FSI我有以下内容:
let foo = List(xs)//works
let bar = new List(xs) //need type parameter 'The type System.Collectsion.Generic<_> expects 1 type argument 0 was given
Run Code Online (Sandbox Code Playgroud)
我当然可以这样做:
let baz = new List<TypeOItemsInXs>(xs)//why?
Run Code Online (Sandbox Code Playgroud)
现在有合理的事情吗?为什么我必须在工作类型推断或警告免费代码之间进行选择(如果'List'是一次性的,你会得到一个警告,你应该使用'new'来明确它).
任何解决方法?这是一个错误还是什么?
你如何解决看起来像这样的错误消息?
`Binding session to 'C:\Program Files (x86)\NLog\.NET Framework 4.0\NLog.dll'...
error FS0193: API restriction: The assembly
'file:///C:\Program Files (x86)\NLog\.NET Framework 4.0\NLog.dll' has
already loaded from a different location. It cannot be loaded from a
new location within the same appdomain.
Run Code Online (Sandbox Code Playgroud)
触发它的代码可能如下所示:
#r @"..\packages\NLog.2.0.0.2000\lib\net20\NLog.dll"
NLog.Config.SimpleConfigurator.ConfigureForConsoleLogging()
Run Code Online (Sandbox Code Playgroud) 我喜欢使用.fsi签名文件来控制可见性.但是,如果我在我的解决方案和脚本中同时拥有 文件Foo.fsi和Foo.fs文件#load "Foo.fs",则似乎不会使用相应的签名文件.如果我做:
#load "Foo.fsi"
#load "Foo.fs"
Run Code Online (Sandbox Code Playgroud)
...然后发生所需的可见性控制.这是实现这一目标的推荐方法,还是有更好的方法来实现这一目标?在一个完美的世界中,人们也希望自动加载签名文件.
我想从 F# 脚本引用一些仅限 .NET Framework 的包,并使用以下命令运行它:
dotnet fsi script.fsx
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
warning NU1701: Package 'Hymans.ESF.Api 1.9.0' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' instead of the project target framework 'net5.0'. This package may not be fully compatible with your project.
Run Code Online (Sandbox Code Playgroud)
有没有办法与 .NET Framework 包一起使用dotnet fsi?
F#Interactive(fsi.exe)有一个引用给定程序集的指令:
>#help;;
[...]
#r "file.dll";; Reference (dynamically load) the given DLL
[...]
Run Code Online (Sandbox Code Playgroud)
我经常喜欢卸载/取消引用先前引用的程序集以重新编译它们.那可能吗?
编辑:我在MacOSX和Mono下运行fsi - 应该与windows下的命令行相同.
我想在fsi中运行一个脚本.我收到以下错误.
无法加载文件或程序集'FSharp.Core,Version = 4.3.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.
我发现以下引用建议我可能必须在Visual Studio中的某处更新默认的FSharp.Core版本,使用nuget下载包是不够的.
我不知道如何解决这个问题,我担心永久性地损坏vs配置.
使用Fsharp.Compiler.Serice Interactive API我想为我的 FsiEvaluationSession 对象设置变量。这可能吗?或者是否有另一种方法可以将 f# 嵌入到应用程序中以用于嵌入脚本?
在VSCode中使用Fsi时遇到问题.我从1.7开始就遇到过这个问题,并且它仍然存在于1.8的当前版本中.
如果我alt + enter用来向VSCode发送代码选择它可以工作,但只能用于短选择.当选择太长时,它在Fsi窗口中不起作用.
我在使用Terminal和Fsi并粘贴一部分文本时发现了同样的问题.
我找不到字符或行限制.我有例如尝试在38行上粘贴1415个字符并且它有效.38行上的1416对我的一个文件不起作用.但是,当我粘贴1568个"a"字符时,它可以工作,而1569则没有.所以它不一定是字符限制.当我输入一些换行符时,这有效:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Run Code Online (Sandbox Code Playgroud)
最后添加另一个,但不是(1534个字符,35行).
它真的很烦人,我找到的唯一解决方法是将小部分代码分别复制到Fsi中,然后执行它们;;.
我在Windows 7,VSCode 1.8.1,ionide-fsharp 2.21.0,F#4.0.换行符计为2个字符(\ r \n).
写下这些数字,显然只有a我们需要的换行符characters + newlines < 1569.但它并不适用于任意其他角色.
是否可以将 Windows.Forms 称为 F# 脚本?正如我知道,当试图指他们.nuget包,说明有一个问题在这里,与潜在的解决方案(直接引用在目标机器上的文件),描述在这里。我没有尝试查看建议的解决方案是否适用于 .net core 3.1(帖子作者使用作者使用的)。但是,在直接引用光盘上的文件之后,我无法在 .net 5 下运行解决方案,错误类似于“无法加载文件或程序集 'System.Drawing.Common, Version=5.0.0.0, Culture = 中性,PublicKeyToken=cc7b13ffcd2ddd51'。无法找到或加载特定文件。(0x80131621)"。
这是代码:
#r "DotnetLocation/dotnet/shared/Microsoft.WindowsDesktop.App/5.0.1/System.Windows.Forms"
#r "DotnetLocation/dotnet/shared/Microsoft.WindowsDesktop.App/5.0.1/System.Drawing"
#r "DotnetLocation/dotnet/shared/Microsoft.WindowsDesktop.App/5.0.1/System.Drawing.Common"
#r "D:/F# Examples/Chapter7Libs/Vector/bin/Debug/netcoreapp5.0/Chapter7libs"
open System.Drawing
open System.Windows.Forms
Application.EnableVisualStyles()let winSize = Size(450, 300)
let display (title: string, (c: Curve.Curve, pw: int, ph: int)) =
let f(x,y) = Point(int(round x), ph - int(round y))
let clst = Curve.toList c
let ptLst = List.map f clst
let pArr = Array.ofList ptLst let pen = new Pen(Color.Black) …Run Code Online (Sandbox Code Playgroud)