我有一个包含VC ++项目的应用程序(以及C#项目)。以前,(即在过去一年左右)构建完成后,Visual Studio 2005似乎是针对VC ++运行时版本8.0.50727.762。至少,这就是Assembly.dll.intermediate.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.CRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
此版本号与Visual Studio 2005版本号匹配。应用程序在部署到Web服务器时工作正常。阳光灿烂,鸟儿在歌唱,一切都与世界一致。
现在情况发生了变化。我不知道是什么 - 一个安全补丁,一个模糊的Visual Studio设置或其他东西。现在,Visual Studio 2005似乎针对的是VC ++运行时的错误版本:
<?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.4053' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
当我将应用程序部署到Web服务器时,我得到了可怕的此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。 (来自HRESULT的异常:0x800736B1)错误。
即使我重新编译应用程序的早期版本,也会出现此问题。我完全可以保证在解决方案中什么都没有已经改变了 - 我们将解决方案的全部内容压缩为构建过程的一部分并将其存档。我已将其中的一些解压缩到临时目录,验证前一个清单文件是指8.0.50727.762,在命令行使用完全相同的命令重新编译,然后验证新的清单文件现在引用8.0.50727.4053。 / p>
我使用的是Microsoft Visual Studio 2005版本8.0.50727.762(SP.050727-7600)和Microsoft Visual C ++ 2005 77646-008-0000007-41610。
为什么Visual Studio会恢复到以前版本的VC ++运行时?如何指定应使用哪个版本?这里出了什么问题?
更新
天啊 - 我是个白痴。 X.7&gt; X.4,但是,X.762&lt; X.4053其中X是版本号。因此,8.0.50727.4053 更新而不是8.0.50727.762。现在整个事情都有意义。我将此作为个人提醒,我认为我是世界上最聪明的人......答案 0 :(得分:1)
可能发生的事情是您的开发机器安装了更新VC ++运行时的新服务更新。没什么大不了的,只需在你的网络服务器上安装所有你需要的更新,事情就会再次发生。
如果你真的需要恢复,那么你需要找到并卸载更改运行时库的更新,没有办法在vs 2005中更改所选的运行时,它将使用最新的和最新的一找到它。
答案 1 :(得分:0)
使用_BIND_TO_CURRENT_XXX_VERSION 1(其中XXX为CRT / MFC / ATL / OPENMP)在VistualStudio RTM的VCRedist和开发框中的最新版本之间进行选择。
http://msdn.microsoft.com/en-us/library/cc664727%28VS.90%29.aspx
PS:不太确定但_BIND_TO_CURRENT_VCLIBS_VERSION报告了一些问题,因此最好为每个MFC / ATL等使用宏。