如何在VSCode中包含用于F#的Akka.net框架 [英] How to include Akka.net framework for F# in VSCode

查看:124
本文介绍了如何在VSCode中包含用于F#的Akka.net框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用我在互联网上找到的该示例,将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆