How to upgrade VS2008 from version 9.0.21022.8 RTM to 9.0.30729.4462 QFE (so that I hope to resolve the __forceCRTManifestCUR error)

I recently installed VS2008 on a new computer, and now I find that it will not contact DLLs created on an older machine, giving error LNK2001: unresolved external symbol __forceCRTManifestCUR. I assume this is related to the Side-By-Side issue.

Having studied a little, I now suspect that the problem is that the old VS2008 installation is updated to QFE version 9.0.30729.4462, while the new VS2008 installation is on 9.0.21022.8 RTM.

Upon further study, I read that I need to install SQL Server 2008 at least on SP1 in order to upgrade VS2008 to a later version. However, I installed SQL Server 2008 on a new machine, and now it is on SR3, but VS2008 is still on version 9.0.21022.8. I suspect that the SQL Server that I installed was preliminarily upgraded to SR2, and this could be a problem.

Windows Update (Microsoft) does not expect pending updates for SQL Server 2008 or Visual Studio 2008.

Please, can you suggest a way to force Visual Studio to upgrade to QFE version 9.0.30729.4462?

Alternatively, are there other solutions to this problem that are not related to recompiling all my precompiled DLLs?

+4
source share
3 answers

Oops - it looks like I was completely misled by Microsoft.

It turns out that this is Visual Studio Service Pack 1, which updates the version from 9.0.21022 to 9.0.30729.

I was convinced that I already had SP1 installed because:

a) SP1 is explicitly indicated in the About dialog box (although it turned out to be .Net 3.5 SP1, not Visual Studio 2008 SP1)

b) Windows Update did not offer Service Pack 1 (SP1), and all "Check for Updates" links to a page that indicates that you are using Windows Update.

After my initial question, I managed to assemble the source database by installing the C ++ feature package for VS2008, but nothing came of it due to Side-by-Side errors. In the end, it occurred to me that maybe SP1 was not installed.

+1
source

The late answer, I know, and much more for posterity, but I had the same discrepancy between VS 2008 installations on two machines. One reported version is "9.0.30729.1 SP" and the other is "9.0.30729.4462 QFE." I wanted them to be the same, and knew that the former had already installed the service pack.

This post inspired me to install SQL 2008 R2 first, and that turned out to be the key. After that, both versions of VS were ".4462 QFE".

+2
source

while VS2008 is still on version 9.0.21022.8

This is not the case, your #includes and CRT libraries actually upgraded to 9.0.30729.4462 when you installed the hotfix / service pack / fix pack.

Open vc / include / crtassem.h to view the macro soup. The value of the _BIND_TO_CURRENT_CRT_VERSION macro, which is valid when compiling the code, is important. When set to 0, you will declare a dependency on the original RTM version of CRT (9.0.21022.8). With fingers crossed behind, Microsoft has not made any changes to the CRT that will destroy your code when it runs on a machine that has a publisher policy that is redirected to a later version of CRT.

With a value of 1 set, you will declare a dependency on the version of CRT on which you actually tested your code with the one installed on your dev machine. This is a more reasonable thing. Despite the fact that Microsoft ran into some problems to ensure that the service fixes on the CRT didn’t break anything, I never heard of a case where this happened.

What the linker warning is trying to tell you, ever so clumsy, is that you are trying to link code that was compiled with _BIND_TO_CURRENT_CRT_VERSION set to 0, with code that was compiled with it equal to 1. Which, of course does not make sense; you cannot have it in both directions.

Correct the compiler settings, they should be the same for all the code that you specified.

+1
source

All Articles