关于WPF程序在XP系统运行发生的问题

为轮子而生 2017-01-03 10:29:10
单位团队开发的一个WPF应用程序,基于.Net4.0,大部分电脑正常,有几台XP系统(32位SP2)出现崩溃现象,异常信息如下

错误来源:PresentationFramework
异常类型:XamlParseException
异常信息:Provide value on 'System.Windows.Baml2006.TypeConverterMarkupExtension' threw an exception

参考网上资料,怀疑是图标问题,遂不使用图标,做了一个简单的测试程序,仅显示图片,但发现在有问题的电脑上运行时,窗体是空白的(大部分电脑是好的)。代码如下:

<Window x:Class="WpfTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTest"
mc:Ignorable="d" Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<Image Width="260" Height="57" Source="/WpfTest;Component/Res/bg_advicer.bmp"/>
<Image Width="260" Height="57" Source="/Res/bg_advicer.bmp"/>
<Image Width="260" Height="57" Source="pack://Application:,,,/Res/bg_advicer.bmp"/>
</StackPanel>
</Grid>
</Window>


我使用了各种路径引用图片资源,均无效果,窗体是白色。

想咨询一下有这方面经验的朋友,WPF程序的呈现是否还需要什么特定的组件?因为我怀疑出现问题的电脑,安装了过度精简过的老XP系统,很可能缺少什么东西。程序已经下通知大范围推广了,不能总让人重装系统不是?

请参考测试条件:
1、大部分电脑正常,可以确定不是程序本身的问题
2、出问题的电脑上已部署.Net4.0,且窗体可以显示,故排除.Net版本、32/64位等因素
3、win7系统未发现异常


事出紧急,还请诸位大侠多出谋划策,感谢!



...全文
740 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你了解一下 source 中的路径的比较完整的写法(从 Assembly 为根引用的方法)。不要随便写相对路径。
crystal_lz 2017-01-06
  • 打赏
  • 举报
回复
引用 5 楼 rocmemory 的回复:
任何事情都有两面性,你不能因为发生一些问题就认为技术革新是错误的,那为什么还要进步呢
在我看到的 2.0 之后增加的东西 基本都是语法糖 方便开发效率 增加语言的一些特性 而语言并不是技术 它只是技术文字上的一种表达形式而已 没有linq我一样写程序 大不了多几句代码 对于这样的封装 虽然方便了开发效率 但是对于一些初学者来说却是一种技术实现上的一种掩盖 很多初学者知其然不知其所以然 甚至觉得实现一个功能就只是几句代码的事情 当遇到几句代码实现不了的时候 就觉得这个功能自己完不成了 而且遇到很多初学的动不动就用4.5之类什么都要用最新的觉得高版本牛逼 结果那些新特性却一个都没用上 那才是真正的错误(或许是初学还不知道那些特性) 不是我不接收更新 只是我觉得我暂时还不需要 还没有到我不用新版本就做不了一些事情的地步 你要说我现在才开始学 那估计我就用新版本了 上面的都是扯 最重要的你做的东西都是给别人用的(其实我的大部分是自己用的) 当你给别人说 要用你的程序需要装东西的时候 别人可能就不乐意了 要用你的东西我还要装这装那的重点是还不知道怎么装我还不如用XXXX呢 所以我用2.0 最保底的 win7 什么的不用考虑 如果是xp用户 随着他平时的使用一些软件的安装 说不定别的软件就给装上了一个环境 在这种情况下 你要考虑的就不是自己了 而是别人 要知道别人不是什么搞技术的 说不定.Net什么的他听都没听过 你给他说叫他装 这种事情 不是没遇到过 别人直接鸟都不鸟你了 还好我只是自娱自乐写写代码 不需要去管这些问题 好了 上面都是我等外卖的时候瞎比比的。。。。
EnForGrass 2017-01-06
  • 打赏
  • 举报
回复
还有就是有可能是动态resource的问题,改成static resource
exception92 2017-01-06
  • 打赏
  • 举报
回复
是 “始终复制” 才行。
exception92 2017-01-06
  • 打赏
  • 举报
回复
引用 7 楼 rocmemory 的回复:
引用 1楼DwLbj 的回复:
bmp图片生成是否设置为Resource?
已经看了,所有图片加进来后默认就是resource
复制到输出目录 是什么动作?
为轮子而生 2017-01-06
  • 打赏
  • 举报
回复
引用 18楼D56233577 的回复:
你这个异常应该是图像无法识别,有类似的反馈。 http://blog.csdn.net/briss/article/details/9499133 建议你将图片格式重新处理一下,确保编码没问题,尺寸也调整一下,再到XP上测试。
他这个是图标的,我不用图标也不显示图片,是bmp的
为轮子而生 2017-01-06
  • 打赏
  • 举报
回复
引用 20楼D56233577 的回复:
XP 不支持 256*256 的图标
那bmp显示不出来是什么意思呢
为轮子而生 2017-01-06
  • 打赏
  • 举报
回复
引用 19楼D56233577 的回复:
也许根本不是你贴的代码出错,而是用了256*256的ICO图标。
没有使用图标
D56233577 2017-01-06
  • 打赏
  • 举报
回复
XP 不支持 256*256 的图标
D56233577 2017-01-06
  • 打赏
  • 举报
回复
也许根本不是你贴的代码出错,而是用了256*256的ICO图标。
D56233577 2017-01-06
  • 打赏
  • 举报
回复
你这个异常应该是图像无法识别,有类似的反馈。 http://blog.csdn.net/briss/article/details/9499133 建议你将图片格式重新处理一下,确保编码没问题,尺寸也调整一下,再到XP上测试。
为轮子而生 2017-01-06
  • 打赏
  • 举报
回复
引用 16 楼 chenandczh 的回复:
缺少了资源文件,你调试的是安装包 还是直接release文件夹扔过去?
当然是正常安装的,而且大部分电脑是好的,只有少数出问题。资源文件是嵌入程序集的
绿领巾童鞋 2017-01-06
  • 打赏
  • 举报
回复
缺少了资源文件,你调试的是安装包 还是直接release文件夹扔过去?
为轮子而生 2017-01-06
  • 打赏
  • 举报
回复
引用 13 楼 sp1234 的回复:
你了解一下 source 中的路径的比较完整的写法(从 Assembly 为根引用的方法)。不要随便写相对路径。
Source="/WpfTest;Component/Res/bg_advicer.bmp" Source="pack://Application:,,,/Res/bg_advicer.bmp" 这两种都不行,不知你说的是? 还请举个例子
为轮子而生 2017-01-06
  • 打赏
  • 举报
回复
引用 12 楼 crystal_lz 的回复:
[quote=引用 5 楼 rocmemory 的回复:] 任何事情都有两面性,你不能因为发生一些问题就认为技术革新是错误的,那为什么还要进步呢
在我看到的 2.0 之后增加的东西 基本都是语法糖 方便开发效率 增加语言的一些特性 而语言并不是技术 它只是技术文字上的一种表达形式而已 没有linq我一样写程序 大不了多几句代码 对于这样的封装 虽然方便了开发效率 但是对于一些初学者来说却是一种技术实现上的一种掩盖 很多初学者知其然不知其所以然 甚至觉得实现一个功能就只是几句代码的事情 当遇到几句代码实现不了的时候 就觉得这个功能自己完不成了 而且遇到很多初学的动不动就用4.5之类什么都要用最新的觉得高版本牛逼 结果那些新特性却一个都没用上 那才是真正的错误(或许是初学还不知道那些特性) 不是我不接收更新 只是我觉得我暂时还不需要 还没有到我不用新版本就做不了一些事情的地步 你要说我现在才开始学 那估计我就用新版本了 上面的都是扯 最重要的你做的东西都是给别人用的(其实我的大部分是自己用的) 当你给别人说 要用你的程序需要装东西的时候 别人可能就不乐意了 要用你的东西我还要装这装那的重点是还不知道怎么装我还不如用XXXX呢 所以我用2.0 最保底的 win7 什么的不用考虑 如果是xp用户 随着他平时的使用一些软件的安装 说不定别的软件就给装上了一个环境 在这种情况下 你要考虑的就不是自己了 而是别人 要知道别人不是什么搞技术的 说不定.Net什么的他听都没听过 你给他说叫他装 这种事情 不是没遇到过 别人直接鸟都不鸟你了 还好我只是自娱自乐写写代码 不需要去管这些问题 好了 上面都是我等外卖的时候瞎比比的。。。。[/quote] 你总在说2.0的好处,我觉得这还是取决于需求的,而你那些根本不需要更新技术框架的需求,其实根本用不到.Net。 .Net之所以叫.Net而不是.Client,是因为它更适合构建大型的云服务,至于客户端应用程序,只是其中一个组成部分,或者说,客户端完全可以不适用.Net。 我们团队构建了一个扩展到全铁路局的大型云计算项目,涉及到的算法和数据交互,完全不是2.0那些“使用迭代或其他替代品”可以实现的,这是服务端必须使用4.0或更高版本的理由。 而至于客户端,为了方便其他单位进行二次开发,共享云平台的服务组件,不得不与服务端保持接口上的一致,又不能每次发布都各自产生4.0和2.0两个版本,所以选择牺牲低版本,向服务端看齐。 .Net的好处,并不是因为它能重写控件,能方便地写接口和集成,能嵌套更多的代码和组件,所有与客户端相关的东西,都不是必须使用.Net的原因。
为轮子而生 2017-01-05
  • 打赏
  • 举报
回复
引用 1楼DwLbj 的回复:
bmp图片生成是否设置为Resource?
已经看了,所有图片加进来后默认就是resource
exception92 2017-01-04
  • 打赏
  • 举报
回复
引用 2 楼 rocmemory 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] bmp图片生成是否设置为Resource?
(那几台电脑已经重装了,现在不太好测试) 这个问题会导致 有的电脑正常,而有的电脑不正常吗?[/quote] 很有可能。 TypeConverterMarkupExtension -》 类型转换标记扩展错误,也就路径没有被识别正确。
crystal_lz 2017-01-04
  • 打赏
  • 举报
回复
所以说 一直用2.0写代码 总感觉高版本在XP上会有很多问题 尤其是精简版系统 而且高版本体积庞大对于有些用户来说 安装都是一个问题 安装过程中各种问题 低版本安装基本没有什么问题 除非迫不得已的情况下我才会提高.Net版本 比如用到了第三方的东西 第三方是高版本 而我自己又没能力把第三方的功能做出来 还有就是我确定我放弃这个程序在XP上运行 才会使用高版本
为轮子而生 2017-01-04
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
bmp图片生成是否设置为Resource?
(那几台电脑已经重装了,现在不太好测试) 这个问题会导致 有的电脑正常,而有的电脑不正常吗?
加载更多回复(1)

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧