从不同程序集引用转换器时的 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 显然可以看到该库,因为它工作正常(在我编写命名空间前缀后提供转换器类)。
知道问题可能是什么吗?
还必须在代码隐藏文件中引用程序集。
如果仅在 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 依赖项中。