5

VS2005 で作成された C++/CLI プロジェクトがあります。私はこれを VS2010 (または 2012) で実行したいと思っています。これは私のメイン IDEであり、C++/CLI プロジェクトでもいくつか変更する必要があり、vs2005 に行ったり来たりして再コンパイルし、コピーする必要があるのはイライラします。など。もう 1 つの重要な理由は、VS2010/2012 で実行されている私のプロジェクトが .NET4 にあるため、すべてを VS2005 に移行するオプションがないことです。

プロジェクトには、C++ 再頒布可能ライブラリ (msvcr80.dll、msvcm80.dll、msvcp80.dll) のデバッグ バージョンに依存するアンマネージド サード パーティ ライブラリへの依存関係があります。

アップグレードされたプロジェクトを最初に実行したとき、「指定されたモジュールが見つかりませんでした」というメッセージが表示されました -

その後、cli プロジェクトが msvc の新しいバージョン (msvcr90.dll) に対してコンパイルされていることに気付きました。

依存する cli アセンブリの依存関係。左が vs2005、右が 2008

ここに画像の説明を入力

2005 ライブラリを使用して VS の新しいバージョンをコンパイルする方法はありますか?

どちらに対してコンパイルするかを更新することは重要ではありません(とにかく不可能かもしれません)が、両方を並べて実行およびデバッグすることは可能ですか?コンパイルされたプロジェクトを実行しようとすると、次のエラー メッセージが表示されます。

ここに画像の説明を入力

マニフェスト ファイルを vs2005 プロジェクトから vs2010 プロジェクトにコピーしようとしましたが、うまくいきません (同じエラー メッセージ)。また、埋め込みマニフェストを無効にし、生成された .manifest ファイルを vs2005 のものに置き換えましたが、これも機能しません。

マニフェストでmsvcrライブラリを指定することで、このエラーを回避できました。

<dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>

ただし、アプリケーションを実行するAccessViolationException - Attempted to read or write protected memoryと、メソッドの1つを使用しようとすると、サードパーティのライブラリの1つがスローされます。それ以外の場合、このコードは vs2005 で正常に動作します。

4

3 に答える 3

4

I have since discovered Daffodil for Visual Studio which does exactly what I need, namely compile against vc80 in visual studio 2010. After installation the Platform Toolset dropdown gets a few more options:

nb, you still need to have the relevant version of Visual Studio installed, eg if targeting vc80 you need vs2005. nb2, Intellisense is broken in vs2010 for cli/c++ which is a major letdown after the amount of time researching getting the project to work on vs2010

enter image description here

于 2013-06-13T12:55:21.457 に答える
0

http://www.davidlenihan.com/2007/07/winsxs.htmlより

「では、アプリケーションはどのバージョンの DLL をロードする必要があるかをどのように知るのでしょうか?そこで「マニフェスト」の出番です。マニフェストは、C:\Windows\winsxs にディレクトリを作成するために使用される情報を含む XML ファイルです。特定の DLL をロードできることを確認してください。」

于 2013-06-12T11:23:58.137 に答える
0

アプリケーションのマニフェストを作成することを検討しましたか? つまり、エラー メッセージには、マニフェストが不足していることが問題であることが示されているので、(プロジェクト設定を介して) マニフェストを作成するか、手書きのマニフェストを追加するだけで十分でしょうか?

参照:マニフェストなしで RT をロードする際の問題

于 2013-06-12T10:45:00.000 に答える