Microsoft Foundation Class
バージョン

MFCのバージョンは、バージョン6.0以降はその対応するVisual C++製品のバージョン番号と同じとなっている。なお、Visual C++コンパイラ自体は _MSC_VER という予約マクロによりバージョン番号が定義されるが、MFCでは _MFC_VER という予約マクロによりバージョン番号が定義される。これらはそれぞれ異なる内部数値になっているので、バージョンに応じてユーザープログラムコードを分岐したい場合は注意が必要となる。
Visual C++に同梱されるMFCのバージョン一覧を下記に示す。
| VC製品バージョン | MFCバージョン | _MFC_VER | 備考 |
| --- | --- | --- | --- |
| Microsoft C/C++ 7.0 | MFC 1.0 | 0x0100 |  |
| Visual C++ 1.0 | MFC 2.0 | 0x0200 |  |
| Visual C++ 1.5 | MFC 2.5 | 0x0250 |  |
| Visual C++ 2.0 | MFC 3.0 | 0x0300 |  |
| Visual C++ 2.1 | MFC 3.1 | 0x0310 |  |
| Visual C++ 2.2 | MFC 3.2 | 0x0320 |  |
| Visual C++ 4.0 | MFC 4.0 | 0x0400 |  |
| Visual C++ 4.1 | MFC 4.1 | 0x0410 |  |
| Visual C++ 4.2 | MFC 4.2 | 0x0420 |  |
| Visual C++ 5.0 | MFC 4.21 (mfc42.dll) | 0x0421 |  |
| Visual C++ 6.0 | MFC 6.0 (mfc42.dll) | 0x0600 | Windows XP以降のOSに標準インストールされている。 |
| Visual C++ .NET 2002 | MFC 7.0 (mfc70.dll) | 0x0700 | 通常アプリケーションの添付のみ。MS07-012等セキュリティ問題も見つかっているがWindows Update等での更新モジュールの提供はない[要出典]。 |
| Visual C++ .NET 2003 | MFC 7.1 (mfc71.dll) | 0x0710 | 通常アプリケーションの添付のみ。MS07-012等セキュリティ問題も見つかっているがWindows Update等での更新モジュールの提供はない[要出典]。 |
| Visual C++ 2005 | MFC 8.0 (mfc80.dll) | 0x0800 | サービスパックおよびセキュリティパッチの適用により、複数のバージョンがインストールされる。 |
| Visual C++ 2008 | MFC 9.0 (mfc90.dll) | 0x0900 | サービスパックおよびセキュリティパッチの適用により、複数のバージョンがインストールされる。 |
| Visual C++ 2010 | MFC 10.0 (mfc100.dll) | 0x0A00 |  |
| Visual C++ 2012 | MFC 11.0 (mfc110.dll) | 0x0B00 |  |
| Visual C++ 2013 | MFC 12.0 (mfc120.dll) | 0x0C00 |  |
| Visual C++ 2015 | MFC 14.0 (mfc140.dll) | 0x0E00 |  |
| Visual C++ 2017 | MFC 14.0 (mfc140.dll) | 0x0E00 | Visual C++コンパイラの内部バージョン番号は14.1だが、CRTライブラリ同様にMFCの内部バージョン番号は14.0のまま据え置きとなっている。 |
| Visual C++ 2019 | MFC 14.0 (mfc140.dll) | 0x0E00 | Visual C++コンパイラの内部バージョン番号は14.2だが、CRTライブラリ同様にMFCの内部バージョン番号は14.0のまま据え置きとなっている。 |
Visual C++ .NET 2003までは、C/C++ (CRT) およびMFCのランタイム ライブラリは開発環境のインストールとともにWindowsのシステム フォルダ（%WinDir%\System32あるいは%WinDir%\SysWOW64）にインストールされるようになっていたが、Windows XP以降の場合、Visual C++ 2005および2008はDLL地獄を解消する目的で、%WinDir%\WinSxS 以下の、amd64_microsoft.vc80.mfc_*、ia64_microsoft.vc80.mfc_*、x86_microsoft.vc80.mfc_*などのフォルダにSide-by-Sideアセンブリとしてインストールされるようになっている。これにより、サービスパックを適用したランタイムをインストールしたり、ランタイムにセキュリティパッチを適用したりすると、旧バージョンのランタイムは上書きされず、新しいバージョンのランタイムが追加インストールされるため、複数の異なるバージョンが共存できる。なお、Visual C++ .NET 2003までは、MFCを使用するアプリケーションの実行プログラムの存在するフォルダにMFCランタイムをコピーして再配布すれば、MFCランタイムがインストールされていないエンドユーザー環境でも実行できていたが、Visual C++ 2005および2008ではこのようなSide-by-Sideアセンブリの形態をとるようになっているため、単純にコピーを添付するだけでは実行することができない。Visual C++ 2005および2008を使用して作成されたMFCアプリケーションをエンドユーザー環境で実行するためには、下記の方法が存在する 。
エンドユーザー環境にVisual C++のランタイムパッケージを別途インストールする。
アプリケーションをビルドする際、CRT/MFCをスタティックリンク（静的リンク）する。
アプリケーションマニフェストを使用してCRT/MFCランタイムをプライベートアセンブリ化する（Windows XP以降）。
1番目の方法は、エンドユーザーの負担が増えるものの、セキュリティ面で最も安全な方法である。インストールされたランタイムDLL群は、Microsoft Updateなどによって提供されるセキュリティパッチの適用対象となる（ただし前述の通り、DLL自体はセキュリティパッチによって書き換えられるわけではない）。なお、エンドユーザーランタイムのインストーラはマイクロソフトから無償提供されており、開発者による再配布も行なえるようになっている。
2番目の方法は、エンドユーザーの手間を減らせるが、アプリケーションビルド時のリンク時間が増加し、実行プログラムのファイルサイズが肥大化するという欠点がある。また、セキュリティパッチ適用の対象外となる（ちなみに/clrオプションを有効にして.NETハイブリッドアプリケーションを作成する場合はそもそもCRT/MFCライブラリをスタティックリンクすることはできない）。
3番目の方法は、アプリケーションにMFCランタイムを同梱するための方法であり、スタティックリンクする場合と同様にエンドユーザーの手間を減らせる。
なお、Visual C++ 2010以降では、CRTおよびMFCランタイムのSide-by-Side配置方式は廃止され、再びVisual C++.NET 2003以前と同じようにWindowsシステム フォルダにインストールされるようになっている。サービスパックおよびセキュリティパッチが適用されると、システム フォルダ内のDLLファイル（mfc100.dllなど）が書き換えられる。