这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@

<!-- Consolidate FSharp package versions -->
<ItemGroup>
<PackageReference Update="FSharp.Core" Version="5.0.0-beta.19460.2" />
<PackageReference Update="FSharp.Compiler.Private.Scripting" Version="11.0.0-beta.19460.2" />
<PackageReference Update="FSharp.Core" Version="5.0.0-beta.19463.12" />
<PackageReference Update="FSharp.Compiler.Private.Scripting" Version="11.0.0-beta.19463.12" />
<PackageReference Update="FSharp.Compiler.Service" Version="31.0.0" />
</ItemGroup>

Expand Down
22 changes: 20 additions & 2 deletions Microsoft.DotNet.Interactive.FSharp/FSharpKernel.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,35 @@

namespace Microsoft.DotNet.Interactive.FSharp

open System.Collections.Generic
open System.IO
open System.Threading.Tasks
open FSharp.Compiler.Scripting
open Microsoft.DotNet.Interactive
open Microsoft.DotNet.Interactive.Commands
open Microsoft.DotNet.Interactive.Events

type FSharpKernel() =
type FSharpKernel() as this =
inherit KernelBase(Name = "fsharp")
let script = new FSharpScript()
let resolvedAssemblies = List<string>()
let script = new FSharpScript(additionalArgs=[|"/langversion:preview"|])

do Event.add resolvedAssemblies.Add script.AssemblyReferenceAdded
do base.AddDisposable(script)

let handleAssemblyReferenceAdded path context =
async {
let loader = KernelExtensionLoader()
let fileInfo = FileInfo(path)
let! success = loader.LoadFromAssembly(fileInfo, this, context) |> Async.AwaitTask
return success
}

let handleSubmitCode (codeSubmission: SubmitCode) (context: KernelInvocationContext) =
async {
let codeSubmissionReceived = CodeSubmissionReceived(codeSubmission.Code, codeSubmission)
context.Publish(codeSubmissionReceived)
resolvedAssemblies.Clear()
let result, errors =
try
script.Eval(codeSubmission.Code)
Expand All @@ -25,6 +40,9 @@ type FSharpKernel() =
if errors.Length > 0 then
let aggregateErrorMessage = System.String.Join("\n", errors)
context.Publish(CommandFailed(aggregateErrorMessage, codeSubmission))
for asm in resolvedAssemblies do
let! _success = handleAssemblyReferenceAdded asm context
() // don't care
match result with
| Ok(Some(value)) ->
let value = value.ReflectionValue
Expand Down