我刚刚将其中一个FsXaml演示程序转换为解释的F#脚本,以便我可以试验并学习.它不会运行,并且解释器给了我以下错误消息:
System.NotSupportedException:动态程序集中不支持调用的成员.
在System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(字符串名称)
在FsXaml.InjectXaml.from(字符串文件,对象根)
在FsXaml.App.InitializeComponent()在FsXaml.App..ctor()
在FSI_0002.main [一](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\Learning\WPFExamples\FsXaml\demos\WpfSimpleMvvmApplication\WPFApp.fsx:第109行
我可以将F#解释器与FsXaml一起使用吗?感谢大家的帮助.
不幸的是,WPF和脚本不能很好地协同工作.
WPF运行时本身发生异常 - FsXaml.InjectXaml使用a XamlObjectWriter来填充包含XAML文件内容的类型.如果您使用的是动态程序集(如FSI),则此类型不起作用,遗憾的是FsXaml可能永远无法使用FSI.
话虽这么说,即使有办法解决这个问题,但使用起来非常有限.WPF也有限制,使其不能使用脚本的情况下,如"只有一个应用程序可以发挥出色永远限制在给定的AppDomain中创建的".那个让它关闭"主"(第一)窗口使得你永远不能打开另一个窗口.因此,我没有优先考虑在FSI中进行这项工作.
如果有人知道如何让FsXaml在FSI环境中更好地发挥作用,我会很乐意接受贡献,但在这一点上,我没有看到这种使用场景的良好解决方案.
编辑: FsXaml 3.1.6现在包含使这更容易的功能.如果您不关闭主窗口或使用对话框,它可以很好地工作.有一个演示应用程序/脚本说明了这一点.