博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Visual Studio 清单(manifest)导致的问题
阅读量:5951 次
发布时间:2019-06-19

本文共 726 字,大约阅读时间需要 2 分钟。

    前些天把一个项目从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下不能正常运行。把以项目资源形式存在的清单删除,编译运行,就正常了。我还尝试了删除后以内嵌和外置两种方式存在的清单,都正常。

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

转载于:https://www.cnblogs.com/witton/archive/2011/11/17/6868981.html

你可能感兴趣的文章
08.实例方法和类方法的区别与及工厂方法
查看>>
mysql 备份
查看>>
内核编译
查看>>
继承和泛型
查看>>
exchange2010 取消OWA内更改密码选项
查看>>
Reverse digits of an integer.
查看>>
openresty 安装
查看>>
2014年前端开发者如何提升自己
查看>>
Web前端工程师应该掌握的内容有哪些
查看>>
软件公司多注重开发不注重管理
查看>>
连接mysql超过连接次数处理办法
查看>>
我的友情链接
查看>>
java rmi 规范学习
查看>>
sqoop 中文文档 User guide 三 export
查看>>
关于@PathVariable与@RequestParam
查看>>
思科园区网络设计
查看>>
CCProgressTimer进度条效果
查看>>
yii2框架中整合PHPOffice的PhpSpreadsheet开源库
查看>>
nfs文件共享
查看>>
Weka开发[11]—J48源代码介绍
查看>>