在加载插件并尝试创建"XYZ"控件时,应用程序将引发以下异常:
"组件'XYZ'没有在UserControls构造函数的InitializeComponent()方法上由URI'/ThePluginAssembly ;component/XYZ.xaml'"标识的资源.
关键点是:
用户控件位于插件程序集中
我试图从插件程序集内部创建usercontrol
插件与主应用程序位于同一目录中
用户控件仅在通过XAML创建时才会出现问题.我在同一个程序集中有几个其他用户控件,但我使用代码实例化这些用户控件.当我尝试在XAML中创建UserControl时,我只收到错误消息.
在做一些谷歌时,我意识到当我的插件的两个实例加载到应用程序中时会发生这种情况.当我从其中一个文件夹中删除我的插件时(我允许从两个位置加载此插件),此异常停止重复发生.
我的问题:
1)WPF尝试解析URI加载我的控件背后的原因是什么?
2)我是否有办法在应用程序中加载我的插件的两个实例,并以某种方式摆脱这个异常?或者某种方式为每个实例创建一个唯一的URI(如果此异常是由冲突的URI引起的).
任何评论或参考都会有所帮助.
谢谢你的关注.
编辑:与Phil发布的问题相同:如何强制WPF使用使用程序集强名称的资源URI?哎呀!
执行此操作的唯一方法是在URI中包含版本信息,以便XAML加载程序可以区分正确的类型.这篇MSDN文章解释了Pack URI格式,Version部分有这样的描述:
; Version [可选]:包含资源文件的引用程序集的版本.当加载两个或多个具有相同短名称的引用程序集时,将使用此方法.
所以你想要使用以下之一:
/ThePluginAssembly;v1.0.0.0;component/XYZ.xaml
/ThePluginAssembly;v1.1.0.0;component/XYZ.xaml
Run Code Online (Sandbox Code Playgroud)