Visual studio 2008 如何将VS2008从版本9.0.21022.8 RTM升级到9.0.30729.4462 QFE(希望能够解决_uforcecrtmanifestcur错误)

Visual studio 2008 如何将VS2008从版本9.0.21022.8 RTM升级到9.0.30729.4462 QFE(希望能够解决_uforcecrtmanifestcur错误),visual-studio-2008,visual-studio-2008-sp1,Visual Studio 2008,Visual Studio 2008 Sp1,我最近在一台新机器上安装了VS2008,现在发现它不会与旧机器上构建的DLL链接,出现错误LNK2001:unresolved external symbol\uuu forceCRTManifestCUR。我想这是一个有着共同利益的问题 经过一点研究,我现在怀疑问题在于旧的VS2008安装升级到了版本9.0.30729.4462 QFE,而新的VS2008安装在9.0.21022.8 RTM上 在进一步研究中,我了解到我需要将SQLServer2008安装到至少SP1,以便将VS2008升级到

我最近在一台新机器上安装了VS2008,现在发现它不会与旧机器上构建的DLL链接,出现错误LNK2001:unresolved external symbol\uuu forceCRTManifestCUR。我想这是一个有着共同利益的问题

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

在进一步研究中,我了解到我需要将SQLServer2008安装到至少SP1,以便将VS2008升级到更高版本。然而,我在新机器上安装了SQL Server 2008,它现在是SR3,而VS2008仍然是9.0.21022.8版。我怀疑我安装的SQL Server是服务前打包到SR2的,这可能就是问题所在

Windows(Microsoft)Update不显示SQL Server 2008或Visual Studio 2008的挂起更新

请您提出一种强制Visual Studio升级到9.0.30729.4462 QFE版本的方法,好吗

或者,对于这个问题,有没有其他解决方案不涉及重新编译所有预编译的DLL

但是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_编译的代码链接到设置为0的_CURRENT_CRT_版本,而使用设置为1编译的代码。这当然毫无意义,你不能两全其美


修复编译器设置,你链接的所有代码都必须相同。

哇-看起来我完全被微软误导了

原来是Visual Studio Service Pack 1将版本从9.0.21022更新为9.0.30729

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

a) About对话框明确提到了SP1(尽管这是.NET3.5SP1而不是VisualStudio2008SP1)

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


在我最初的问题之后,我已经成功地通过安装VS2008的C++特性包来构建我的源库,但是由于并排错误,没有什么可以运行。最后,我突然想到,可能SP1还没有安装。

我知道,这是一个迟来的回复,对后人来说更是如此,但在两台机器上安装VS 2008时,我发现了类似的差异。一个报告版本为“9.0.30729.1 SP”,另一个报告版本为“9.0.30729.4462 QFE”。我希望它们是一样的,并且知道第一个已经安装了服务包


这篇文章激发了我的灵感,让我第一次尝试安装SQL2008R2,结果证明这是关键。在此之后,两个VS版本都是“.4462 QFE”。

谢谢Hans,“绑定到当前”CRT“版本是否与“绑定到当前”VCLIBS“版本(似乎设置为1)”的标志相同?我看不到在我的项目中任何地方都定义了当前的CRT版本。我的CRTASSEM.H的内容如下:#ifndef#VC#ASSEMBLY#u PUBLICKEYTOKEN#define#VC(ASSEMBLY)PUBLICKEYTOKEN#1fc8b3b9ae18e3b#endif#ifndef#CRT(ASSEMBLY#VERSION#9.0.21022.8#define#endif#ifndef“Microsoft.VC90“#endifI我知道——这对我来说是个愚蠢的错误,如果这个问题对任何人都没有帮助,我会很高兴地删除它。但我现在就把它放在这里,以防其他人像我一样被误导/迷惑。请不要否定我的观点,但如果你认为应该将其删除为“没有帮助”,请将其注释掉。你还记得你是刚安装了引擎还是需要其他2008r2功能,例如2008年的SSMS吗?我昨天读了这篇文章,现在就要做了——但我不想为了把我的VS 2008设置复制到一台新机器上而浪费太多硬盘空间。@basher我也会安装SSMS:/要回答上面的评论,你不需要安装SSMS来获得QFE版本。只需安装SQL 2008 R2安装中的出价。我这样做了,效果非常好。有证据表明,简单地安装也可以提供9.0.30729.4462。Loki70的经验也是我的——安装BIDS将VS版本提升到4462 QFE。