2011-03-24 43 views
0

我正在使用Visual Studio 2005在Windows XP中开发二进制文件。我生成了我的应用程序的调试版本和发行版本,并且在我的机器上一切正常。但是,当我尝试在另一台机器上运行该应用程序时,调试版本运行正常(我认为是因为我在两台机器上都有相同的Visual Studio),但发布版本在执行时遇到问题(我拥有相同版本的可再发行组件) 。 阅读在这里#1,我已经设置了嵌入式清单以没有,当我生成我的应用程序,我可以看到我的版本的清单,其内容是这样的:清单。在发布版本中执行二进制时出错

<?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.CRT" 
     version="8.0.50727.762" 
     processorArchitecture="x86" 
     publicKeyToken="1fc8b3b9a1e18e3b"> 
     </assemblyIdentity> 

    </dependentAssembly> 

    </dependency> 

    <dependency> 

    <dependentAssembly> 

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

    </dependentAssembly> 

    </dependency> 

    <dependency> 

    <dependentAssembly> 

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

    </dependentAssembly> 

    </dependency> 

</assembly> 

如果我删除最后一个条目,8.0.50727.4053在目标机器的清单中,我可以成功运行该应用程序,但是,为什么将此条目添加到清单中?我怎样才能删除它?

问候

回答

0

舱单是Microsoft解决他们的DLL地狱。程序使用的每个库都有一个(libname,version)条目,以便Windows可以加载正确的版本。

关于去除:

你可以试试,如果你的版本VS具有静态链接MFC和CRT库到可执行文件的能力。然后这些物品应该从舱单中消失。

如果您不能静态链接并且完全控制运行时环境,那么您可以在没有.manifest文件的情况下运送。当你无法控制你的runitme环境时,最好为你的应用程序创建一个安装程序,它捆绑了所需的库。

+0

是的,但我能做些什么来删除这个8.0.50727.4053条目的清单?以及为什么我的应用程序没有这个入口运行 – opernas 2011-03-24 07:18:39

0

当您在VS2005中使用DLL运行时构建项目时,编译器会自动包含用于将dependentAssembly条目添加到最终清单的信息。

这里发生了什么可能是由于您包括一个使用VS2005 RTM构建的静态库项目,现在您尝试使用VS2005 SP1构建项目。

你的解决方案是:

  • 重建项目中的静态库与最新的VS2005,所以所有dependentAssemblies指向相同的,最新的版本。

  • 仅重建您的EXE,并带有强制它参考RTM运行时的选项。使用说明如下:here

  • 完全禁用自动清单,只需发送一个手工制作的只有一个dependentAssembly CRT参考,作为您的首选CRT版本。