如何在VSCode中包含用于F#的Akka.net框架 [英] How to include Akka.net framework for F# in VSCode
问题描述
我正在尝试使用我在互联网上找到的该示例,将Akka.NET用于VSCode中的F#.
I am trying to use Akka.NET for F# in VSCode using this example I found on the internet.
代码
// ActorSayHello.fsx
#time "on"
// #load "Bootstrap.fsx"
open System
open Akka.Actor
open Akka.Configuration
open Akka.FSharp
open Akka.TestKit
// #Using Actor
// Actors are one of Akka's concurrent models.
// An Actor is a like a thread instance with a mailbox.
// It can be created with system.ActorOf: use receive to get a message, and <! to send a message.
// This example is an EchoServer which can receive messages then print them.
let system = ActorSystem.Create("FSharp")
type EchoServer =
inherit Actor
override x.OnReceive message =
match message with
| :? string as msg -> printfn "Hello %s" msg
| _ -> failwith "unknown message"
let echoServer = system.ActorOf(Props(typedefof<EchoServer>, Array.empty))
echoServer <! "F#!"
system.Shutdown()
但我收到此错误 ActorSayHello.fsx(6,6):错误FS0039:未定义名称空间或模块"Akka".
我已经在VScode中配置了ionide插件,并且能够在没有Akka.NET的情况下运行F#.我使用以下命令安装了Akka.NET
I have configured ionide plugin in VScode and am able to run F# without Akka.NET. I installed Akka.NET using the following command
dotnet添加软件包Akka.FSharp --version 1.4.10
添加的库会自动添加到 .fsproj
文件中.这是命令的输出
The library got added automatically added to .fsproj
file. This is the output of the command
任何帮助将不胜感激.谢谢!
Any help would be greatly appreciated. Thank you!
推荐答案
由于您使用的是脚本文件,因此它不包含任何项目引用.相反,您可以直接从脚本中使用nuget引用!
Since you are using a script file it doesn't contain any project reference. Instead you can use nuget references directly from the script!
#r "nuget: Akka.FSharp"
#r "nuget: Akka.TestKit"
可能发生的另一个警告是,F#交互需要使用-langversion:preview
标志才能使用nuget引用.在VSCode settings.json
中设置"FSharp.fsiExtraParameters":["--langversion:preview"]
对我来说很成功.
Another caveat that might occur is that F# interactive needs a --langversion:preview
flag to be able to use nuget references. Setting "FSharp.fsiExtraParameters": ["--langversion:preview"]
in the VSCode settings.json
did the trick for me.
最后要做的更改是将 system.Shutdown()
替换为 system.Terminate()
,因为 Shutdown
方法已弃用并删除.
And the last bit that I had to change to make it compile was to replace system.Shutdown()
with system.Terminate()
because Shutdown
method was deprecated and removed.
以下是带有上述更改的完整列表:
Here is the full listing with changes mentioned above:
// ActorSayHello.fsx
#time "on"
#r "nuget: Akka.FSharp"
#r "nuget: Akka.TestKit"
// #load "Bootstrap.fsx"
open System
open Akka.Actor
open Akka.Configuration
open Akka.FSharp
open Akka.TestKit
// #Using Actor
// Actors are one of Akka's concurrent models.
// An Actor is a like a thread instance with a mailbox.
// It can be created with system.ActorOf: use receive to get a message, and <! to send a message.
// This example is an EchoServer which can receive messages then print them.
let system = ActorSystem.Create("FSharp")
type EchoServer =
inherit Actor
override x.OnReceive message =
match message with
| :? string as msg -> printfn "Hello %s" msg
| _ -> failwith "unknown message"
let echoServer = system.ActorOf(Props(typedefof<EchoServer>, Array.empty))
echoServer <! "F#!"
system.Terminate()
结果在我的机器上如下所示:
And the result looks like this on my machine:
Real: 00:00:00.000, ЦП: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0
namespace FSI_0012.Project
Hello F#!
Real: 00:00:00.007, ЦП: 00:00:00.000, GC gen0: 1, gen1: 0, gen2: 0
val system : ActorSystem = akka://FSharp
type EchoServer =
class
inherit Actor
override OnReceive : message:obj -> unit
end
val echoServer : IActorRef = [akka://FSharp/user/$a#989929929]
val it : Threading.Tasks.Task
这篇关于如何在VSCode中包含用于F#的Akka.net框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!