WPF 控件抛出“由 URI 标识的资源缺失”异常

2024-02-16

在加载插件并尝试创建“XYZ”控件时,应用程序抛出以下异常:

“组件‘XYZ’没有 由 URI 标识的资源 '/ThePluginAssembly;组件/XYZ.xaml'" 在InitializeComponent()方法中 UserControls 构造函数。

关键点是:

  1. 用户控件位于插件程序集中

  2. 我正在尝试从插件程序集中创建用户控件

  3. 插件与主应用程序位于同一目录中

  4. 用户控件仅在通过 XAML 创建时才会出现问题。我在同一个程序集中还有几个其他用户控件,但我使用代码实例化它们。当我尝试在 XAML 中创建 UserControl 时,我仅收到错误消息。

在进行一些谷歌搜索时,我意识到当我的插件的两个实例加载到应用程序中时会发生这种情况。当我从其中一个文件夹中删除我的插件时(我允许从两个位置加载此插件),此异常停止重复出现。

我的问题:

1) WPF 尝试解析 URI 来加载我的控件背后的原因是什么?

2)有没有一种方法可以让我的插件的两个实例加载到应用程序中并以某种方式摆脱这个异常?或者通过某种方式为每个实例创建唯一的 URI(如果此异常是由冲突的 URI 引起的)。

任何评论或参考都会有帮助。

感谢您的关注。

编辑: 与 Phil 发布的问题相同:如何强制 WPF 使用使用程序集强名称的资源 URI?啊! https://stackoverflow.com/questions/1453107/how-to-force-wpf-to-use-resource-uris-that-use-assembly-strong-name-argh


执行此操作的唯一方法是在 URI 中包含版本信息,以便 XAML 加载程序可以区分正确的类型。这MSDN http://msdn.microsoft.com/en-us/library/aa970069.aspx文章解释了 Pack URI 格式,版本部分有这样的描述:

;版本 [可选]:包含资源文件的引用程序集的版本。当加载两个或多个具有相同短名称的引用程序集时,将使用此选项。

所以你想使用以下之一:

/ThePluginAssembly;v1.0.0.0;component/XYZ.xaml
/ThePluginAssembly;v1.1.0.0;component/XYZ.xaml
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 控件抛出“由 URI 标识的资源缺失”异常 的相关文章

随机推荐