FsXaml可以用在F#解释的脚本中吗?

时间:2017-01-30 22:29:34

标签: xaml f# fsxaml

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

  

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

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

1 个答案:

答案 0 :(得分:5)

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

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

话虽如此,即使有办法解决这个问题,但使用起来非常有限。 WPF还有一些限制,使其无法在脚本方案中运行良好,例如只有一个应用程序可以永远在给定的AppDomain中创建"限制。那个让它关闭了#34;主要" (第一个)窗口使它永远不会打开另一个窗口。因此,我没有优先考虑在FSI中完成这项工作。

如果有人知道如何让FsXaml在FSI环境中更好地发挥作用,我会很乐意接受贡献,但此时,我还没有看到这种用法的良好解决方案场景。

编辑:FsXaml 3.1.6现在包含使这更容易的功能。如果您不关闭主窗口,或者使用对话框,它运行良好。有一个演示应用程序/脚本说明了这一点。