如何将VS2008从版本9.0.21022.8 RTM升级到9.0.30729.4462 QFE(希望解决__forceCRTManifestCUR错误)

时间:2012-06-26 08:57:20

标签: visual-studio-2008 visual-studio-2008-sp1

我最近在新机器上安装了VS2008,现在发现它不会与旧机器上构建的DLL链接,给出错误LNK2001:未解析的外部符号__forceCRTManifestCUR。我认为这与Side-By-Side的问题有关。

经过一番研究,我现在怀疑问题是旧的VS2008安装升级到版本9.0.30729.4462 QFE,而新的VS2008安装是9.0.21022.8 RTM。

在进一步研究时,我读到我需要将SQL Server 2008安装到至少SP1才能将VS2008升级到更高版本。我在新机器上安装了SQL Server 2008,现在它在SR3,但VS2008仍然在9.0.21022.8版本上。我怀疑我安装的SQL Server是预先服务打包到SR2的,这可能是问题。

Windows(Microsoft)更新显示SQL Server 2008或Visual Studio 2008没有待处理的更新。

请问您能否建议一种强制Visual Studio升级到9.0.30729.4462 QFE版本的方法?

或者,是否有任何其他解决此问题的方法,不涉及重新编译所有预编译的DLL?

2 个答案:

答案 0 :(得分:1)

  

但VS2008仍然是版本9.0.21022.8

事实并非如此,当您安装了修补程序/ Service Pack /安全补丁时,您的#includes和CRT库实际上已升级到9.0.30729.4462。

打开vc / include / crtassem.h查看宏汤。重要的是编译代码时生效的_BIND_TO_CURRENT_CRT_VERSION宏值。设置为0时,您将声明对CRT的原始RTM版本(9.0.21022.8)的依赖性。手指交叉在背后,微软没有对CRT进行任何更改,这会在安装了发布者策略并重定向到以后CRT版本的计算机上运行时破坏您的代码。

将它设置为1,您将声明对您实际测试代码的CRT版本的依赖性,即您在开发机器上安装的CRT版本。哪个是更明智的事情。虽然微软经历了一些麻烦,以确保CRT的服务补丁没有破坏任何东西,但我从来没有听说过这种情况发生过的情况。

链接器警告试图告诉你的是,你是如此笨拙,是因为你试图将用_BIND_TO_CURRENT_CRT_VERSION设置为0的代码链接到用它设置为1编译的代码。这当然没有意义,你不可能两种方式。

修复编译器设置,对于您链接的所有代码,它们必须相同。

答案 1 :(得分:1)

哎呀 - 好像我被微软误导了。

事实证明,Visual Studio Service Pack 1将版本从9.0.21022更新为9.0.30729。

我确信我已经安装了SP1,因为:

a)“关于”对话框明确提到了SP1(虽然结果是.Net 3.5 SP1而不是Visual Studio 2008 SP1)

b)Windows Update没有提供SP1供下载,所有“检查更新”链接都会路由到指示您使用Windows Update的页面。

在我最初的问题之后,我已经设法通过安装VS2008的C ++ Feature Pack来构建我的源代码库,但是由于并排错误,没有任何东西会运行。最终我发现可能还没有安装SP1。