【发布时间】:2011-08-06 15:41:45
【问题描述】:
我正在编译一个使用多个 DLL 并使用 VS2008 编译的项目。最近在我的计算机上编译的 Windows 更新 DLL 在其他计算机上停止工作后。
经过一番调查,结果发现它将我正在编译的 CRT 可再发行库从版本“9.0.21022.8”更新到版本“9.0.30729.4148”
这从我正在编译的 EXE 的清单文件中很明显。它包含以下内容:
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.4148" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
意味着它想同时使用两个不同版本的 CRT。 我现在正在编译的代码需要第二个版本,而几周前编译的旧 dll 需要第一个版本。
在部署应用程序的计算机中,这成为一个问题,因为它们从名为 Microsoft.VC90.CRT 的本地文件夹而不是 WinSXS 获取 CRT dll。
此文件夹不能包含两个不同版本的 dll。
是否有解决此问题的已知解决方案,或者我是否需要开始使用新 CRT 编译所有其他 DLL?
【问题讨论】:
-
我想我上周注意到了完全相同的问题。在 Windows 更新后,前一天构建良好的项目不再构建。事实上,它导致了 VS2008 编译器中的 ICE 崩溃。重建都解决了这个问题。我从来没有确定确切的原因,但这对我来说没什么大不了的,因为我们还没有发货。
标签: visual-studio-2008 manifest crt winsxs