VC++ の Visual Studio 2010 の変更点 (パート 5)

この投稿では、VC++ 2010 での配置の変更について説明します。アプリケーションを別のマシンに配置する場合、アプリケーションだけでなく、アプリケーションが依存するすべてのライブラリもインストールする必要があります。 VC++ でビルドすると、CRT (C/C++ ランタイム) に依存し、MFC や ATL に依存する可能性があります。

Visual Studio 2005 では、分離アプリケーションに基づく Windows クライアント アプリケーションの新しい展開モデルが導入されました。 および並列アセンブリ .アセンブリは共有できます (システムにグローバルに登録され、グローバル アセンブリ キャッシュ (Windows の GAC フォルダー) にインストールされ、すべてのアプリケーションで利用可能) または サイド バイ サイド (マニフェストで記述され、アプリケーションと共に配布され、そのアプリケーションでのみ利用可能)。

Visual C++ 2005 では、ライブラリ アセンブリ (MFC、ATL、CRT など) がサイド バイ サイド共有として再構築されました。 アセンブリであり、Windows のネイティブ アセンブリ キャッシュである WinSxS フォルダーにインストールされます。つまり、それらはシステムにグローバルに登録されていませんが、マニフェスト ファイルで依存関係を指定するアプリケーションでグローバルに利用できます。

VC++ 2005 または 2008 では、いくつかの展開オプションがあります:

  • 静的リンク :アプリケーションを VC++ ライブラリ (CRT、MFC、または ATL) に対して静的にリンクする場合、アプリケーションには依存関係がないため、他の VC++ DLL をターゲット マシンにデプロイする必要はありません
  • 共有のサイド バイ サイド アセンブリ :VC++ DLL は WinSxS フォルダーに展開されます。これは、Visual C++ 再頒布可能マージ モジュールまたは Visual C++ 再頒布可能パッケージのいずれかで実行できます。アプリケーションには、依存する DLL とそのバージョンを記述したマニフェスト ファイルが必要です
  • プライベート アセンブリ :VC++ DLL はすべて、アプリケーションと同じフォルダーにインストールされます。アプリケーションにはマニフェスト ファイルが必要です

Visual Studio 2005 または 2008 でビルドされたアプリケーションをデプロイする場合、これらの VC++ DLL をローカル フォルダーにデプロイしたか、WinSxS フォルダーにインストールしたかに関係なく、依存関係を説明するマニフェスト ファイル。マニフェストが見つからない場合、エラーが発生します。次の画像は、VC++ 2008 でビルドされた MFC アプリケーション (Wordpad2008 と呼ばれる) を別のマシンでマニフェストなしで実行したときに受け取ったエラーを示しています。

この変更の目的は展開を簡素化することでしたが、結果はおそらく逆でした。その結果、Microsoft は Visual C++ 2010 の展開要件を変更しました。Fusion またはサテライト マニフェストなしでアプリケーションを展開できるようになりました。 VC++ に依存する DLL をアプリケーション フォルダーにコピーして実行するだけです。次の画像は、VC++ 2010 を使用して構築された MFC アプリケーション (Wordpad2010 と呼ばれる) を別のマシンで実行し、サテライト アセンブリを使用していないことを示しています。ローカル展開でサテライト マニフェストが不要になったため、アプリケーションを起動しようとしてもエラーは発生しなくなりました。

VC++ 2010 には、展開のためのいくつかのオプションがあります:

  • 静的リンク :前と同じ
  • 中央展開 :VC++ DLL は system32 フォルダーに展開されます。 Windows はここにデプロイされた DLL を自動的に識別して更新するため、これは更新に役立ちます
  • ローカル展開 :アプリケーションの実行可能ファイルとそれに依存する DLL はすべて同じフォルダーにインストールされます。マニフェスト ファイルは必要ありません。

展開とマニフェスト ファイルの詳細については、次のリンクをお勧めします:

  • Visual C++ アプリケーション:マニフェストと再配布可能なアセンブリの使用方法
  • 導入方法の選択 (VC++ 2008)
  • Visual C++ 2010 での展開
  • C/C++ 分離アプリケーションとサイド バイ サイド アセンブリのトラブルシューティング
  • .NET フュージョン