Toggle navigation
首页
关于TCPGAME
快乐分享
联系我们
C# WPF 引用外部样式库时VS设计器无法预览并出现无法解析资源错误提示
Lonner
时间:2022-01-14 09:08:42
阅读:4732
###现象 WPF引用了一个开源控件库Handycontrol,已在**App.xaml**文件中添加了引用 ```csharp <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> ``` 在VS2019的xaml中,出现波浪线,并提示**无法解析资源** ![无法解析资源](//tcpgame.com\mdimg\6b884bda-4143-47df-b09a-e1287bc1c888_微信图片_20220114091118.png "无法解析资源") 但是按下F12,是可以跳转到对应的样式文件中,并且在编辑器中也有智能提示。 ![智能提示生效](//tcpgame.com\mdimg\2d68b9e0-5850-44d1-a583-a9fbf922202f_微信图片_20220114091230.png "智能提示生效") 设计器界面没有呈现UI库样式,但是点击运行之后,运行的窗口中是出现了UI库样式。 ###解决过程 - 重新打开xaml,无效 - 重新生成,运行,重新打开xaml,无效 - 切换.net Framework版本,重新生成,无效 - 切换为Release,重新生成,无效 - 重启VS,无效 - 删除obj、bin、.vs目录,重新打开项目,重新生成,无效 - 重启PC,无效 我开始怀疑是VS设计器出问题了,于是新建了一个项目,导入Handycontrol UI库,发现一切正常,那VS设计器应该是没什么问题; 回到原项目,怀疑是界面xaml绑定的VM在设计时运行了某些逻辑错误了,导致xaml未能继续完整运行,于是把xaml中所有绑定的VM模型构造方法中出现的其他逻辑注释掉,重新生成,还是不行。在这个时候我又执行了一次上述的解决过程,结果在切换为Release时,奇迹出现了,波浪线消失,设计器内也显示了效果,问题奇迹般消失了。 ![release](//tcpgame.com\mdimg\23557ae4-3c47-4b40-b438-6cc4f3d1d714_release_20220114095852.png "release") 然后我又切换回Debug,重新生成,问题依旧出现。 ![debug](//tcpgame.com\mdimg\6f957b6e-0555-43c6-ba5a-aa8c39fd9dc8_debug_20220114095907.png "debug") 既然是Debug与Release的区别,那在生成时查看对应的生成输出,看看是否有什么不一致的信息。 结果发现在Debug模式下生成,有项目引用的Dll产生了一些告警。于是将这些DLL引用移除,调整一下逻辑后,重新生成,Debug模式下设计器页正常了。然后重新引用这些Dll,重新生成,设计器界面显示正常。 本来以为移除引用重新引用就解决问题了,当关闭VS再启动,发现问题又出现了,最后将这些DLL,匹配到合适版本,Debug重新生成不产生告警后,问题才正式的得到解决。 ###结论 感觉是VS设计器的bug,当界面绑定有VM,VM的构造函数出现部分运行代码,这些代码在设计器的设计时运行可能产生了错误,但是设计器并没有报错。设计器也不再继续执行初始化逻辑,也就是不会再去加载第三方UI库的资源等动作,但是在设计界面,禁用效果呈现(禁止运行后面VM代码),并没有解决问题,还是得处理VM构造函数的代码。(PS:VM构造函数我一般不会执行其他代码,但是项目是团队开发,其他小伙伴喜欢在VM执行一堆其他的逻辑代码) 此外,其他DLL的引用warning信息竟然会影响到VS设计器,这个始终都没想到,所以养成良好的编程习惯也是规避问题的关键。 ###解决方案 先规避VM设计时,在构造函数里面运行其他代码; 检查其他DLL的引用是否存在告警,如果存在就解决告警信息;
上一章:没有了
下一章:没有了