标签: f#-interactive

F#以编程方式运行.fsx脚本文件

我确信这一定非常简单,但我似乎无法使其发挥作用.假设我有一个.fsx脚本文件,并希望以编程方式执行它.我猜想有人必须在某个时候写过关于此的博客,但我似乎无法找到一个执行我简单场景的例子.基本上,我想以编程方式复制右键单击.fsx文件并选择"使用F#Interactive运行..."时发生的情况.

scripting f# f#-interactive

6
推荐指数
1
解决办法
2058
查看次数

在F#中输入推理和新内容

使用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'来明确它).

任何解决方法?这是一个错误还是什么?

f# f#-interactive

6
推荐指数
2
解决办法
482
查看次数

F#interactive,对dll引用的API限制

你如何解决看起来像这样的错误消息?

`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)

f# f#-interactive

6
推荐指数
1
解决办法
368
查看次数

在脚本中使用签名文件

我喜欢使用.fsi签名文件来控制可见性.但是,如果我在我的解决方案和脚本中同时拥有 文件Foo.fsiFoo.fs文件#load "Foo.fs",则似乎不会使用相应的签名文件.如果我做:

#load "Foo.fsi"
#load "Foo.fs"
Run Code Online (Sandbox Code Playgroud)

...然后发生所需的可见性控制.这是实现这一目标的推荐方法,还是有更好的方法来实现这一目标?在一个完美的世界中,人们也希望自动加载签名文件.

f# f#-interactive

6
推荐指数
1
解决办法
142
查看次数

`dotnet fsi` 可以在 .NET Framework 模式下运行吗?

我想从 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# f#-interactive dotnet-cli

6
推荐指数
1
解决办法
735
查看次数

从F#interactive中卸载/取消引用引用的程序集

F#Interactive(fsi.exe)有一个引用给定程序集的指令:

>#help;;
   [...]
   #r "file.dll";;        Reference (dynamically load) the given DLL
   [...]
Run Code Online (Sandbox Code Playgroud)

我经常喜欢卸载/取消引用先前引用的程序集以重新编译它们.那可能吗?

编辑:我在MacOSX和Mono下运行fsi - 应该与windows下的命令行相同.

f# assemblies f#-interactive

5
推荐指数
1
解决办法
1574
查看次数

如何为Visual Studio 2012 fsi更新FSharp.Core

我想在fsi中运行一个脚本.我收到以下错误.

无法加载文件或程序集'FSharp.Core,Version = 4.3.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.

我发现以下引用建议我可能必须在Visual Studio中的某处更新默认的FSharp.Core版本,使用nuget下载包是不够的.

我不知道如何解决这个问题,我担心永久性地损坏vs配置.

f# f#-interactive visual-studio-2012

5
推荐指数
1
解决办法
718
查看次数

FSharp 嵌入式 API 添加变量

使用Fsharp.Compiler.Serice Interactive API我想为我的 FsiEvaluationSession 对象设置变量。这可能吗?或者是否有另一种方法可以将 f# 嵌入到应用程序中以用于嵌入脚本?

f# f#-interactive f#-compiler-services

5
推荐指数
1
解决办法
123
查看次数

在vscode终端中粘贴时的字符/行限制

在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.但它并不适用于任意其他角色.

f# f#-interactive fsi visual-studio-code ionide

5
推荐指数
1
解决办法
623
查看次数

在 .net 5 中运行表单表单 F# 脚本?

是否可以将 Windows.Forms 称为 F# 脚本?正如我知道,当试图指他们.nu​​get包,说明有一个问题在这里,与潜在的解决方案(直接引用在目标机器上的文件),描述在这里。我没有尝试查看建议的解决方案是否适用于 .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)

f# f#-interactive .net-5

5
推荐指数
1
解决办法
147
查看次数