Visual Studio 清单(manifest)导致的问题

    前些天把一个项目从XP 32位平台拿到Win7 64位平台去编译运行,用VS2008按Win32的方式编译连接都通过,但是一运行就报错,说是找不到msvcr90.dll,编译的DEBUG版本,也会调用msvcr90.dll?把项目中的每个工程配置中的“代码生成”中的“运行时库”由“多线程DLL(/MD)”设置成“多线程调试DLL(/MDd)”,一编译运行还是报同样的错。

    从VS2005开始,微软就将所有生成的应用程序都加上了一个清单文件(manifest),这个清单文件包含了运行此应用程序所需要的一些文件配置信息,如平台,版本等等,这个清单文件可以内嵌在应用程序中,也可以单独存在。在应用程序运行时就会根据这个清单文件去找相应的依赖文件,默认首先是查找系统目录下的WinSxS目录,如果找不到会在应用程序所在目录去查找。这个项目在XP下用VS2008是完全正常编译运行,但在Win7 X64下就出现了找不到动态库的问题。

    几经查找与试验,发现原来项目中的资源包含一个清单,这个清单只包含Common Controls的库文件comctl32.dll,项目在编译连接时会生成一个单独的清单文件,这个清单文件不包括Common Controls的库文件,我想应该是以项目资源形式存在的清单内嵌到应用程序中与非项目资源形式的清单发生冲突,导致在Win7下不能正常运行。把以项目资源形式存在的清单删除,编译运行,就正常了。我还尝试了删除后以内嵌和外置两种方式存在的清单,都正常。

    希望我的经历能帮助到遇到同样问题的网友。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值