The manifest in VS2008

This issue only applies to VS2008; other versions do not have this problem.

2025-11-22

Written by: xiaobin

A preliminary manifest was used in VS2008.

Therefore, the version number needs to be set manually.

CRT

It is not, your #includes and CRT libraries did in fact get upgraded to 9.0.30729.4462 when you installed the hotfix/service pack/security patch.

Open vc/include/crtassem.h to see the macro soup. 
What matters is the _BIND_TO_CURRENT_CRT_VERSION macro value that's in effect when you compile your code. 
When set to 0, you'll declare a dependency on the original RTM version of the CRT (9.0.21022.8). 
With fingers crossed behind your back that Microsoft didn't make any changes in the CRT that will break your code 
when it runs on a machine that has a publisher policy installed that redirects to a later CRT version.

With it set to 1, you'll declare a dependency on the version of the CRT that you actually tested your code with, 
the one that's installed on your dev machine. Which is the more sane thing to do. 
Albeit that Microsoft went through some trouble to ensure that service patches to 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 clumsily, 
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 set to 1. 
Which of course makes no sense, you can't have it both ways.

Fix the compiler settings, they must be the same for all code you link.
	// 0
    #define _BIND_TO_CURRENT_CRT_VERSION 1

MFC

	// 0
    #define _BIND_TO_CURRENT_MFC_VERSION 1

MFCassem.h

VC/atlmfc/include/MFCassem.h

/***
*MFCassem.h - Libraries Assembly information
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       This file has information about Libraries Assembly version.
*
*
****/

#pragma once

#ifndef _VC_ASSEMBLY_PUBLICKEYTOKEN
#define _VC_ASSEMBLY_PUBLICKEYTOKEN "1fc8b3b9a1e18e3b"
#endif

#if !defined(_BIND_TO_CURRENT_VCLIBS_VERSION)
  #define _BIND_TO_CURRENT_VCLIBS_VERSION 0
#endif

#if !defined(_BIND_TO_CURRENT_MFC_VERSION)
  #if _BIND_TO_CURRENT_VCLIBS_VERSION
    #define _BIND_TO_CURRENT_MFC_VERSION 1
  #else
	// 0
    #define _BIND_TO_CURRENT_MFC_VERSION 1
  #endif
#endif

#ifndef _MFC_ASSEMBLY_VERSION
#if _BIND_TO_CURRENT_MFC_VERSION
#define _MFC_ASSEMBLY_VERSION "9.0.30729.1"
#else
#define _MFC_ASSEMBLY_VERSION "9.0.21022.8"
#endif
#endif

//// ...

Subsequent versions

For some reason with Visual Studio 2010 Microsoft has reverted the behaviour to VS2003 and no manifests are generated by default.