7

我刚刚将其中一个 FsXaml 演示程序转换为解释的 F# 脚本,以便我可以对其进行试验和学习。它不会运行,并且解释器给了我以下错误消息:

System.NotSupportedException:动态程序集中不支持调用的成员。
在 System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(String name)
在 FsXaml.InjectXaml.from(String file, Object root)
在 FsXaml.App.InitializeComponent() 在 FsXaml.App..ctor()
在 FSI_0002.main[a ](a argv) 在 C:\Users\bobmc\OneDrive\FSharp\Learning\WPFExamples\FsXaml\demos\WpfSimpleMvvmApplication\WPFApp.fsx:line 104
at .$FSI_0002.main@() in C:\Users\bobmc\ OneDrive\FSharp\Learning\WPFExamples\FsXaml\demos\WpfSimpleMvvmApplication\WPFApp.fsx:109 行

我可以将 F# 解释器与 FsXaml 一起使用吗?感谢大家的帮助。

4

1 回答 1

6

不幸的是,WPF 和脚本不能很好地协同工作。

异常发生在 WPF 运行时本身 -FsXaml.InjectXaml使用XamlObjectWriterXAML 文件中的内容填充类型。如果您使用的是动态程序集(如 FSI),则此类型不起作用,不幸的是,这意味着 FsXaml 可能永远无法在 FSI 中工作。

话虽如此,即使有办法解决这个问题,它的用途也非常有限。WPF 也有一些限制,使其不能很好地与脚本场景配合使用,例如“在给定的 AppDomain 内只能创建一个应用程序限制。那个使它关闭“主”(第一个)窗口,因此您永远无法打开另一个窗口。因此,我没有优先尝试在 FSI 中进行这项工作。

如果有人知道如何让 FsXaml 在 FSI 的上下文中更好地发挥作用,我很乐意接受贡献,但在这一点上,我没有看到该使用场景的好的解决方案。

编辑: FsXaml 3.1.6 现在包含使这更容易的功能。只要您不关闭主窗口或使用对话框,它就可以很好地工作。有一个演示应用程序/脚本说明了这一点。

于 2017-02-02T18:35:46.827 回答