我刚刚将其中一个FsXaml演示程序转换为一个解释的F#脚本,这样我就可以对它进行实验并学习。它无法运行,解释器给了我以下错误消息:
System.NotSupportedException:在动态程序集中不支持被调用的成员。 在System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(String的名字) 在FsXaml.InjectXaml.from(字符串文件,对象根) 在FsXaml.App.InitializeComponent() at FsXaml.App..ctor() 在C:\Users\bobmc\OneDrive\FSharp\Learning\WPFExamples\FsXaml\demos\WpfSimpleMvvmApplication\WPFApp.fsx:line 104号的FSI_0002.maina 在C:\Users\bobmc\OneDrive\FSharp\Learning\WPFExamples\FsXaml\demos\WpfSimpleMvvmApplication\WPFApp.fsx:line 109中的.$FSI_0002.main@()
我可以使用F#解释器和FsXaml吗?感谢你的帮助。
发布于 2017-02-02 18:35:46
不幸的是,WPF和脚本不能很好地结合在一起。
异常发生在WPF运行时本身- FsXaml.InjectXaml使用XamlObjectWriter来填充XAML文件中的内容。如果使用动态程序集(如FSI),则此类型无法工作,不幸的是,这意味着FsXaml很可能永远无法从FSI中工作。
尽管如此,即使有办法解决这个问题,它的用处也是非常有限的。WPF还有一些限制,使得它不能很好地处理脚本场景,例如“在给定的AppDomain中只能创建一个应用程序”。那个使它如此关闭“主”(第一)窗口使它,所以你永远不能打开另一个。因此,我还没有优先考虑如何在FSI中实现这一目标。
如果有人知道如何使FsXaml在FSI的上下文中发挥得更好,我很乐意接受贡献,但在这一点上,我不认为有一个很好的解决方案的使用场景。
编辑: FsXaml 3.1.6现在包含了功能,以使这更容易。如果不关闭主窗口,或者使用对话框,它就能正常工作。有一个演示应用程序/脚本说明了这一点。
https://stackoverflow.com/questions/41946555
复制相似问题