一、问题

编译某个遗留工程后,运行程序时报错,“由于应用程序的配置不正确,应用程序无法启动。重新安装应用程序可能会解决这个问题。”

查看生成的Manifest文件如下:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugMFC' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugMFC' version='8.0.50727.6195' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>

问题出现在第三个assemblyIdentity中version的值与机器上该dll的值不符。

二、解决方法

需要将manifest中第三个assemblyIdentity中version的值修改为与机器上相应dll的版本。

查看该项目的属性发现,【连接器】->【清单文件】->【生成清单】项的值为“是”。由此可见,该manifest文件是编译器生成的。据推测,manifest中第三条assemblyIdentity信息,可能是根据该项目使用的某些dll依赖的dll版本生成的。例如,该项目用到了A.dll,而A.dll是在其他机器上编译的,编译A.dll的机器上的Microsoft.VC80.DebugMFC的版本是'8.0.50727.6195'。

1. 如果推测是正确的,那么在本机重新编译A.dll,再重新编译程序,新生成的manifest中第三个assemblyIdentity中version的信息将会与本机中相应dll的版本信息一致,就不会报上面所说的错误信息。

2. 可以通过不生成manifest,而使用自己写的manifest来避免这个错误。

使用自己写的manifest,需要进行如下设置。

1)将【连接器】->【清单文件】->【生成清单】项的值设置为“否”。表示不需要程序自己生成Manifest。

2)将【清单工具】->【输入和输出】->【附加清单文件】项的值设置为自己写的manifest文件的路径。

上图中include.manifest文件是自己根据程序之前生成的manifest文件改的。内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

    </dependentAssembly>

  </dependency>

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type="win32" name="Microsoft.VC80.DebugMFC" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

    </dependentAssembly>

  </dependency>

  <dependency>

    <dependentAssembly>

      <assemblyIdentity type="win32" name="Microsoft.VC80.DebugMFC" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

    </dependentAssembly>

  </dependency>

</assembly>

注意第三条assemblyIdentity项中version的信息。

3)重新生成程序后运行,即解决问题。

3. 可否不生成manifest?

既然生成的manifest中某些assembly的version信息与本机不符会导致程序报错,那么,能不能不生成manifest文件呢?

答案是:否。

在VS2005中,运行程序必须有相应的manifest。如果在项目属性的【连接器】->【清单文件】->【生成清单】中选择“否”,而在【清单工具】->【输入和输出】->【附加清单文件】项中又没有设置清单文件路径,那么生成程序时将不会生成manifest文件。

运行程序时会报如下错误:

VS2005 Manifest 配置问题总结的更多相关文章

  1. VS2005 VS2008 Manifest 配置问题总结

    一.问题 编译某个遗留工程后,运行程序时报错,“由于应用程序的配置不正确,应用程序无法启动.重新安装应用程序可能会解决这个问题.” 查看生成的Manifest文件如下: <?xml versio ...

  2. 基于vs2005以上版本Qt程序发布的注意事项(讲了manifest的问题)

    最近发现了一个非常恼人的程序deployment的问题,估计大家有可能也会遇到,特此memo. 问题的出现我觉得主要还是微软搞的花头太多, 一个不知所谓的manifest文件让本来简单的程序发布变得困 ...

  3. vs2005 ,2008,2010中引入app.manifest(即c#程序在win7下以管理员权限运行方法)

    打开VS2005.VS2008.VS2010工程,查看工程文件夹中的Properties文件夹下是否有app.manifest这个文件:如没有,按如下方式创建:鼠标右击工程在菜单中选择“属性”,点击工 ...

  4. 如何在其他电脑上运行VS2005编译的DEBUG版应用程序

    做项目的过程中,遇到这样的问题:在自己的电脑上用VS2005编译好的DEBUG版程序在其它的没有安装VS2005的电脑上没有办法运行,郁闷至极啊. 直 接拷贝文件后,错误信息如下:"This ...

  5. VS2005下开发PPC2003和WM50编译器一些设置

    1.vs2005开发WM5时,编译器和linker的选项配合问题 链接:http://www.mivi.name/blog/index_en.php?itemid=258 首先说ARM4 ARM4T ...

  6. C#项目中引入app.manifest管理员权限运行

    原文地址:https://blog.csdn.net/qq395537505/article/details/51010962 参考UAC:User Account Control 参考IE保护模式: ...

  7. c#通过app.manifest使程序 右键 以管理员身份运行

    c#通过app.manifest使程序以管理员身份运行 时间:2013-06-27 22:47来源:网络收集+本站整理 作者:jtydl 点击: 1175 次 微软在Windows Vista开始引入 ...

  8. c#通过app.manifest使程序以管理员身份运行

    通常我们使用c#编写的程序不会弹出这个提示,也就无法以管理员身分运行.微软的操作系统使用微软的产品方法当然是有的,通过app.manifest配置可以使程序打开的时候,弹出UAC提示需要得到允许才可以 ...

  9. HTML 5 应用程序缓存manifest

    什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: 离线浏 ...

随机推荐

  1. ylbtech-DBD-WeShop(微店)

    ylbtech-DatabaseDesgin:ylbtech-DBD-WeShop(微店) DatabaseName:WESHOP Model:微店数据设计 Type:专业技术网站 Url: 1.A, ...

  2. kernel简介

    内存管理 一般来看有三种类型的地址:物理地址.线性地址和逻辑地址,逻辑地址的精髓在于将地址分成两部分:段基地址+偏移,翻译的过程如下: 线性地址的精髓在于将所有的内存按照一定的大小分成了一页一页,对多 ...

  3. javascript快速入门21--DOM总结

    跨浏览器开发 市场上的浏览器种类多的不计其数,它们的解释引擎各不相同,期待所有浏览器都一致的支持JavaScript,CSS,DOM,那要等到不知什么时候,然而开发者不能干等着那天.历史上已经有不少方 ...

  4. http://www.cnblogs.com/monian/p/3822980.html

    http://www.cnblogs.com/monian/p/3822980.html

  5. Idea闪退问题-内存不能给太大

    Idea闪退问题-内存不能给太大 学习了:https://blog.csdn.net/qq_17776287/article/details/77529455 学习了:https://blog.csd ...

  6. proto3 中的 map 类型

    .proto syntax = "proto3"; option optimize_for = SPEED; message TestStruct { map<int32,s ...

  7. $ gulp watch 运行出错解决方法

    $ gulp watch 运行出错解决方法   $ gulp watch     如果你出现了如下报错信息: gulp-notify: [Laravel Elixir] Browserify Fail ...

  8. react-native + react-native-tab-navigator 实现 TabBar

    1.安装 react-native-tab-navigator yarn add react-native-tab-navigator 2.页面调用 /** * 主页面 */ import React ...

  9. 响应式设计工具网站mydevice.io

    1.网址 https://mydevice.io/ 2.使用 在mydevice.io上有常见智能手机,PC电脑的尺寸.

  10. Tabs or Spaces?

    Never mix tabs and spaces. The most popular way of indenting Python is with spaces only. The second- ...