C++ 显示在发布版本中执行二进制文件时出错

C++ 显示在发布版本中执行二进制文件时出错,c++,windows,visual-studio-2005,manifest,C++,Windows,Visual Studio 2005,Manifest,我正在用VisualStudio2005在WindowsXP中开发一个二进制文件。我已经生成了我的应用程序的调试和发布版本,在我的机器上一切正常。但是,当我尝试在另一台机器上运行应用程序时,调试版本运行良好(我认为这是因为我在两台机器上都有相同的Visual Studio),但发布版本在执行时出现问题(我有相同版本的可再发行文件)。 在Stackoverflow中阅读这里的内容,我已将嵌入式清单设置为no,当我生成应用程序时,我可以看到我的发布清单,其内容如下: <?xml version

我正在用VisualStudio2005在WindowsXP中开发一个二进制文件。我已经生成了我的应用程序的调试和发布版本,在我的机器上一切正常。但是,当我尝试在另一台机器上运行应用程序时,调试版本运行良好(我认为这是因为我在两台机器上都有相同的Visual Studio),但发布版本在执行时出现问题(我有相同版本的可再发行文件)。 在Stackoverflow中阅读这里的内容,我已将嵌入式清单设置为no,当我生成应用程序时,我可以看到我的发布清单,其内容如下:

<?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,我可以成功运行应用程序,但是,为什么要将此条目添加到清单中?我怎样才能删除它


“问候”

清单是Microsoft针对其DLL地狱的解决方案。程序使用的每个库都有一个(libname,version)条目,因此Windows可以加载正确的版本

关于搬迁:

如果您的VS版本能够将MFC和CRT库静态链接到可执行文件中,则可以尝试。然后这些项目应该从清单中消失


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

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

这里发生的事情可能是因为您包含了一个使用VS2005RTM构建的静态库项目,而现在您正试图使用VS2005SP1构建一个项目

您的解决方案是:

  • 使用最新的VS2005重新生成项目中的静态库,以便所有DependentAssembly指向相同的最新版本

  • 仅重建EXE,并提供强制其引用RTM运行时的选项。说明是

  • 完全禁用自动清单,只需提供一个手工制作的清单,其中只有一个dependentAssembly CRT引用,这是您首选的CRT版本


是的,但如何删除清单中的8.0.50727.4053条目?为什么我的应用程序运行时没有这个条目???