首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修复XamlObjectWriterException,不能在F#、FsXaml、WPF应用程序中创建未知类型?

修复XamlObjectWriterException,不能在F#、FsXaml、WPF应用程序中创建未知类型?
EN

Stack Overflow用户
提问于 2019-03-16 21:44:39
回答 1查看 1.1K关注 0票数 1

我在一个用F#、FsXaml和Elmish.WPF构建的WPF应用程序中得到了这个错误。

代码语言:javascript
运行
复制
System.Xaml.XamlObjectWriterException:
Cannot create unknown type '{http://schemas.componentone.com/winfx/2006/xaml}C1ProgressIndicator'.
at System.Xaml.XamlObjectWriter.WriteStartObject(XamlType xamlType)
at FsXaml.InjectXaml.from(String file, Boolean loadFromResource, Object root)
  • 视图项目包含XAML,并包含对C1.WPF.4.dll的引用。
  • XAML从C1.WPF.4.dll中声明一个控件的实例。
  • 但是,没有使用C1.WPF.4.dll中的任何类型的F#代码。
  • 因此,正如IL所确认的,Views.dll不包含对C1.WPF.4.dll的引用。
  • 因此,在构建App.exe时,输出文件夹中不包含C1.WPF.4.dll。
  • 因此,我得到一个运行时错误。

虽然我可以在我的App项目中包含对C1.WPF.4.dll的引用,但我还是不愿意。

有更好的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-03-16 21:47:04

为了让它发挥作用:

  1. 在XAML文件中,将XAML命名空间替换为CLR命名空间。例如,不要使用xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml",而是使用类似于xmlns:c1="clr-namespace:C1.WPF;assembly=C1.WPF.4"的东西。

这是必需的,因为当App.exe运行时,它可能还没有加载控件库。正是在控件库中,属性创建了从XAML命名空间到CLR命名空间的映射。通过显式声明CLR命名空间和程序集,XamlReader可以找到要实例化的类。

  1. 在视图代码中创建一个虚拟实例。虚拟实例是控件库中某个东西的实例。这将在Views.dll中创建控件库上的依赖项。 //强制编译器添加对C1.WPF.4.dll的引用,让私有forceC1DllReference = C1.WPF.Anchor.TopLeft类型MainWindowView = XAML< "MainWindow.xaml“>

第二个感觉就像个黑客。我想知道是否有更好的方式说,“请添加对这个DLL的引用,即使我没有使用它的类型。”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55201786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档