我需要在F#交互式环境下创建一个新的AppDomain,以便托管多个WPF应用程序。我没有任何问题让编译后的F#应用程序获得必要的功能,但是不知道为什么在F#交互式环境下无法实现此功能。
以下是最简单的情况:
我总是会收到类似以下内容的回复
我需要做什么才能在F#交互式环境中使其运行?
以下是最简单的情况:
#r "PresentationCore.dll"
#r "PresentationFramework.dll"
#r "System.Xaml.dll"
#r "WindowsBase.dll"
open System
open System.Threading
open System.Windows
type myClass() =
let domain = AppDomain.CreateDomain("another domain")
//this function starts a WPF app
let funct() =
let WPFStart() =
let app = Application()
let win = Window()
app.Run(win) |> ignore
let thread = Thread WPFStart
thread.IsBackground <- true
thread.SetApartmentState ApartmentState.STA
thread.Start()
do CrossAppDomainDelegate(funct) |> domain.DoCallBack
myClass();;
我总是会收到类似以下内容的回复
System.Runtime.Serialization.SerializationException: Type is not resolved
for member 'FSI_0002+-ctor@24,FSI-ASSEMBLY, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null'.
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at FSI_0002.myClass..ctor()
at <StartupCode$FSI_0005>.$FSI_0005.main@()
Stopped due to error
我需要做什么才能在F#交互式环境中使其运行?
AppDomain
边界传递,需要在一侧将其序列化并在另一侧进行反序列化。MethodInfo
对象被序列化为程序集名称、类型名称、方法名称和签名。由于您的方法实际上是在动态程序集中定义的,而该程序集不存在于磁盘上,因此接收AppDomain
无法仅通过程序集名称加载它,因此它无法反序列化委托。 - user4003407