0

我试图弄清楚为什么调试版本会因“无法找到依赖程序集 microsoft.vc80.debugcrt”事件错误而崩溃。

删除所有内容(不是 .cpp 或 .h 的内容)并重新创建解决方案后 - 我仍然遇到问题。

谷歌搜索没有结果,重新安装 VS 并没有产生任何变化。

我确实在 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c 中有 dll。

我打开了 \debug\.exe.intermediate.manifest 文件,它有 2 个(dependentAssembly)条目:
第一个:name='Microsoft.VC80.DebugCRT' version='8.0.50608.0'
第二个:name='Microsoft.VC80.DebugCRT '版本='8.0.50727.762'

如果我删除一个并将另一个更改为 name='Microsoft.VC80.DebugCRT' version='8.0.50727.42'

我可以得到一个将开始的构建。

当然,我确实安装了 VS2008 - 但是控制版本的是什么?或者我怎样才能获得正确的调试 dll 版本来“坚持”。

VS2008是通过控制面板卸载的。

编辑:如果搜索 DebugCRT,则在注册表中找不到任何内容。
环境路径指向 VS8 文件夹。
c:\windows\winsxs\policies 文件夹中只有1个DebugCRT文件夹
(8.0.50.727.42)
c:\windows\winsxs\manifests文件夹只有.42版本的.cat和
.manifest.manifest文件(在上面的清单文件夹中)有 version="8.0.50727.42"

澄清:清单文件有 2 个“dependentAssembly”条目,每个条目都有不同的版本,而不是 .42。我可以删除 1 个条目并更改另一个条目以匹配 .42 以获取启动的调试版本。

EDIT2:我也在使用 boost 并且在 DLL 中有 .762 版本

4

3 回答 3

1

该版本是从 Boost DLL 中获取的,这是 Boost 的下载、预编译版本。一旦库被重新编译(并重新安装),解决方案的重新构建会生成一个具有单个版本的清单,并且程序链接并运行。

因此 - 检查导入到解决方案中的库和 dll 以了解使用的版本。

于 2009-03-24T19:16:40.180 回答
0

VS 2008 是 VC90 而不是 VC80,所以这不是问题的一部分。清单请求的程序集和 SxS 加载的程序集之间的关系可在 C:\WINDOWS\WinSxS\Policies 中找到。IIRC,“8.0.50608.0”由 VS2005 pre-SP1 生成。这是错误的,应该是 8.0.50727.42,但这被政策抓住了。

我不确定您如何获得两个清单。你的清单设置是什么?

于 2009-03-24T12:18:59.590 回答
0

我建议在您的特定环境中重建 Boost。此外,您可以通过静态链接 CRT 来完全取消 Side by Side 程序集...

于 2009-03-25T00:15:09.790 回答