本文链接: https://blog.csdn.net/lishuangquan1987/article/details/123347719
版权
开发环境
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
最终的解决办法
在项目中新建一个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.更改系统设置的后台代码如下:
/// <summary>
/// SystemSettingView.xaml 的交互逻辑
/// </summary>
public partial class SystemSettingView : Window
{
public SystemSettingView()
{
//InitializeComponent();
this.LoadViewFromUri("/Test.Views.ClientUI;component/views/systemsettingview.xaml");
this.DataContext=new SystemSettingViewModel();
}
}
根本原因
待找到后贴出来,初步断定是微软的BUG
可能的原因
1.跨程序集继承控件:https://www.cnblogs.com/lindexi/archive/2022/09/21/16714348.html。但是此类型的报错,在.Net7与.NetFramework 4.7.2都存在
评论区