VS2005 VS2008 Manifest 配置问题总结

摘要:
˃问题出现在第三个assemblyIdentity中version的值与机器上该dll的值不符。据推测,manifest中第三条assemblyIdentity信息,可能是根据该项目使用的某些dll依赖的dll版本生成的。使用自己写的manifest,需要进行如下设置。表示不需要程序自己生成Manifest。2)将-˃-˃项的值设置为自己写的manifest文件的路径。上图中include.manifest文件是自己根据程序之前生成的manifest文件改的。在VS2005中,运行程序必须有相应的manifest。

一、问题

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

VS2005 VS2008 Manifest 配置问题总结第1张

查看生成的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。

VS2005 VS2008 Manifest 配置问题总结第2张

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

VS2005 VS2008 Manifest 配置问题总结第3张

上图中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 VS2008 Manifest 配置问题总结第4张

免责声明:文章转载自《VS2005 VS2008 Manifest 配置问题总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DataGridView的DataGridViewComboBoxColumn列点击一次随便谈谈网络通讯延迟和应用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

把VS2008九十天试用版本升级成正式版的办法

把VS2008九十天试用版本升级成正式版的办法:升级正式版的方法是把Setupsetup.sdb文件中的[Product Key],由T2CRQGDKBVW7KJR8C6CKXMW3D修改为PYHYPWXB3BB2CCMV9DX9VDY8T。因为九十天试用版本已经是 rtm版本。所以改变序列号以后的升级或者安装,就会变成正式版。不再有使用期限。 VS20...

VS2008 集成SVN工具AnkhSvn介绍

版本控制器总是出问题,打算尝试下AnkhSVN,转个文章,免得忘记了。 AnkhSVN 最初是作为Visual Studio的一个插件出现的,通过它,你可以在Visual Studio中开发用SVN 版本控制的项目。这次所发布的2.0版 本完全重写了内核引擎。而对于Visual Studio 2005和2008来说,AnkhSVN是作为免费的源代码控制包交...

Winform部署时强名称签名mshtml.dll无效的解决方案

在部署一个vs2008环境下的Winform应用程序时,因为引用一个Html编辑器,而用到了Microsoft mshtml.dll程序集, 版本为7.0.3300.0,对应文件在 C:\Vs2008的安装目录\Visual Studio Tools for Office\PIA\Office11\Microsoft.mshtml.dll C:\Vs20...

VS2008 ,TFS2008破解序列号

将试用版(90天)变成永久正式版的方法:一、先安装试用版,然后在“添加或删除程序”里找到VS2008,点“更改/删除”就会看到一个输入序列号的地方,把序列号输进去,点“升级”按钮即可,Team Suite和Professional通用。 以下是收集的序列号: 1.Visual Studio 2008 Professional Edition: XMQ2Y-...

VS2008 在IE中 调试 ActiveX控件 .

不知道是不是微软的粗心大意,VS2008中竟然没有ActiveX控件测试容器。 幸好需要在IE中测试控件,就不需要那个测试容器啦。 1. 生产测试控件的HTML: <HTML><HEAD><TITLE>Test</TITLE></HEAD><BODY> <OBJECT WIDTH...

VS2008中的配置文件app.config简单小结

应用程序的配置文件用于读取和保存简单的本地数据,vs中新增配置文件可以直接在项目的”属性“-”设置“里添加,添加后在项目的Properties文件夹会多出一组两个文件:Settings.settings和Settings.Designer.cs,前者是一个xml文件用于vs界面的显示,后者是一个vs生成的继承了System.Configuration.Ap...