谈谈Visual Studio中的清单

来源:互联网 发布:南京互动投影软件 编辑:程序博客网 时间:2024/05/24 22:44

清单的作用,指定程序依赖的C运行库的dll及版本,包括mfc,atl,CRT等,可以在visual studio安装目录下的vc/redist下看到Release和Debug的版本,具体依赖哪项,可以看看您的项目配置

 

(确定您的应用程序依赖哪些 Visual C++ 库的一种方式是:查看您项目的"项目设置"对话框中的"常规"选项卡。例如,您可能看到项目使用的是 MFC 和 ATL 库。如果选择了"在动态库中使用 MFC",则您的应用程序在运行时将依赖 MFC DLL(如 mfc80.dll)。如果您的应用程序不使用 MFC 或 ATL,它可能仍依赖 CRT 库(如果已在"项目属性"的 C/C++ 分支中的"代码生成"选项卡上为"运行时库"选择了"多线程调试 DLL (/MDd)")

---该段引自msdn理解 Visual C++ 应用程序的依赖项


清单可以嵌入也可以不嵌入。

嵌入的好处不需要特别留意将清单跟可执行程序放在一起,缺陷是换一个电脑运行出了问题不容易处理。

不嵌入的优缺点与嵌入的一一对应,此生彼长。

这里注意下,一般有三个文件,一个资源文件,一个中间清单,还有一个最终清单,对我们来说真正有用的就是最终清单,默认命名方式为程序名.manifest,比如你的可执行文件是test.exe,那么该最终清单为test.exe.manifest。

 

如果您调整清单设置由嵌入到不嵌入,注意需要重新编译所有依赖的外部库,否则容易导致R6034,某个应用程序尝试不使用清单来加载C运行库。

 

我除了遇到过上面这个清单引起的错误以外,还碰到如下由清单引起的错误:visual studio 2008 sp1编写的嵌入清单的程序换了台电脑运行,提示配置错误,使用visual studio 2008远程调试提示错误由清单导致,寻找错误的过程道路曲折,还是项目组组长细心地发现了问题,嵌入的清单引用的crt版本号与拷贝过去的crt库版本不一致,vs2008 sp1生成manifest文件中vc++ runtime的版本号为9.0.21022.8,而sp1的版本是9.0.30729.1。发现了问题接下来就好解决了,网上搜索下,具体可以参考http://blog.squallatf.org/post/125/,另外微软官方论坛也有对该问题的说明与解决方案。

 


 

 

原创粉丝点击