从不同程序集引用转换器时的 XamlParseException

本文关键字:XamlParseException 转换器 引用 程序集 | 更新日期: 2023-09-27 18:31:05

我有一个XAML用户控件,它使用同一项目中包含的转换器。

xmlns:filter="clr-namespace:SampleModuleFilter" - namespace definition

目前为止,一切都好。但是,当我将转换器移动到另一个程序集并相应地调整命名空间和引用时,我得到以下异常:XamlParseException - "在'System.Windows.Markup.StaticResourceHolder'上提供值"抛出异常。内部异常指出"方法或操作未实现",这很奇怪。移动到另一个库后的命名空间如下所示:

xmlns:filter="clr-namespace:SampleLibrary.Converters;assembly=SampleLibrary"

转换器资源定义为:

<filter:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" />

我是这样使用它的:

Visibility="{Binding DisplayLabel, Converter={StaticResource ResourceKey=boolToVisibilityConverter}}"

IntelliSense 显然可以看到该库,因为它工作正常(在我编写命名空间前缀后提供转换器类)。

知道问题可能是什么吗?

从不同程序集引用转换器时的 XamlParseException

还必须在代码隐藏文件中引用程序集。

如果仅在 XAML 部件中引用程序集,编译器将返回"无法加载 xxx.dll"异常。

您还必须直接调用连接的程序集,使其如下所示:

var dummy = new MyExternalAssemby.MyType();

或者只是在一行新代码中

new MyExternalAssemby.MyType();

不将结果放入虚拟变量中。

通常我在静态构造函数中执行此操作。我认为这是 XAML 解释器中的一个错误,因为 XAML 没有编译,而只是在 BAML(二进制 XAML)中"翻译"。因此,如果在 XAML 中引用类型而不在 NET 链接器背后的代码中创建"硬"引用,则根本不会忽略它。

呵洛伦佐

而不仅仅是:

 xmlns:filter="clr-namespace:SampleModuleFilter"

也引用程序集

 xmlns:filter="clr-namespace:SampleModuleFilter;assembly=SampleModuleFilterAssemblyName"

这应该可以解决问题。

这很奇怪; 我们的转换器都位于中央库中,并且工作正常。假设引用和命名空间是正确的,我唯一能建议的就是清理并重建这两个有问题的项目。

"

SampleLibrary.dll"是否在您的代码中使用?

我遇到了一个奇怪的错误,其中仅在 xaml 文件中使用的引用程序集在编译时被跳过,并且不会出现在 dll 依赖项中。

相关文章:
  • 没有找到相关文章