栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Wpf BUG:组件“XXX”不具有由 URI“XXX“识别的资源

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Wpf BUG:组件“XXX”不具有由 URI“XXX“识别的资源

开发环境

VS2022+WPF+.Net6
Prism:8.1.97
HandyControl:3.3.0

错误截图:

错误的发生前的操作(100%出现)

1.在主窗体上点击菜单打开系统设置。
2.系统设置界面(另外一个Window)能正常显示。
3.关闭系统设置界面。
4.再次在主窗体上点击菜单打开系统设置
5.报错,报组件“XXX”不具有由 URI“XXX"识别的资源

问题的奇怪之处是,第一次打开系统设置窗体没问题,第二次打开就报错

问题的解决

这个问题我遇到过好几次。检查代码没有发现错误。可能是微软的BUG
但是最后解决了。

尝试过的解决办法:

1.重新生成项目
2.关闭VS,删掉.vs文件,然后重新打开VS编译
3.将项目由AnyCPU改为x86

最终的解决办法

参考:https://stackoverflow.com/questions/7646331/the-component-does-not-have-a-resource-identified-by-the-uri

在项目中新建一个Extension.cs的类:

static class Extension
{
    public static void LoadViewFromUri(this FrameworkElement userControl, string baseUri)
    {
        try
        {
            var resourceLocater = new Uri(baseUri, UriKind.Relative);
            var exprCa = (PackagePart)typeof(Application).GetMethod("GetResourceOrContentPart", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, new object[] { resourceLocater });
            var stream = exprCa.GetStream();
            var uri = new Uri((Uri)typeof(BaseUriHelper).GetProperty("PackAppBaseUri", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null, null), resourceLocater);
            var parserContext = new ParserContext
            {
                BaseUri = uri
            };
            typeof(XamlReader).GetMethod("LoadBaml", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null, new object[] { stream, parserContext, userControl, true });
        }
        catch (Exception)
        {
            //log
        }
    }
}

2.更改系统设置的后台代码如下:

/// 
/// SystemSettingView.xaml 的交互逻辑
 /// 
 public partial class SystemSettingView : Window
 {
     public SystemSettingView()
     {
         //InitializeComponent();
         this.LoadViewFromUri("/Test.Views.ClientUI;component/views/systemsettingview.xaml");
         this.DataContext=new SystemSettingViewModel();
     }
 }
根本原因

待找到后贴出来,初步断定是微软的BUG

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985086.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号