Visual Studio 2010 C / C ++ランタイムのリンクと展開ポリシーの変更について説明している公式ノート、kbの記事、またはその他のドキュメントはどこにありますか?
Visual Studio 2008(VC90ランタイムを使用)では、マニフェストがネイティブイメージに埋め込まれ、ランタイムライブラリがサイドバイサイドアセンブリ(WinSxS)として展開されました。これにより、VS 2008 SP1を使用してネイティブexeまたはライブラリを再構築するときに問題が発生し、埋め込みマニフェストにはC++ランタイムの更新バージョンが必要でした。
VS 2010およびMSVCR100ランタイムバージョンでは、ポリシーが完全に変更されたようです。
- ファイルmsvcr100.dllおよびその他のC/C ++ランタイムライブラリは、SxSアセンブリとしてインストールされなくなりました。
- VS2010でコンパイルする場合、実行時の「依存関係」エントリは埋め込みマニフェストに追加されません。つまり、実行時に任意のバージョンのmsvcr100.dllがロードされる可能性があります。
- .NET 4がインストールされているマシンでは、一致するランタイムの名前はmsvcr100_clr0400.dllであり、ネイティブコードでは読み込まれませんが、msvcr100.dllに名前が変更されたコピーは正常に機能します。これは、C / C ++コードを使用するプロセスには、常に同じC /C++ランタイムの2つのバージョンがロードされることを意味すると思います。
これはポリシーの重要な変更のようであり、VS 2008でのSxSの展開とマニフェストの依存関係から遡ります。変更された内容を誰かがもっと明らかにし、これらの変更を説明するドキュメント、Readme、またはブログ投稿を指摘できますか?動機と関連する影響?
この方法の方が優れていると思います-強力なバージョンマニフェストとSxSの展開は悪夢でした-しかし、VS2010でのこれらの予期しない一見文書化されていない変更に驚いています。
ボーナスの質問: VS2010でC++ / CLIライブラリをコンパイルして、msvcr100.dllではなくmsvcr100_clr0400.dllにリンクするにはどうすればよいですか?この考え方は、C ++ / CLIアセンブリは、.NET 4によってインストールされたもの以外の依存関係なしで(静的リンクなしで)実行する必要があるということです。