1

Windows7とVisualStudio2010、ServicePack1を搭載した新しくインストールした開発マシンがあります。

私たちのソリューションには、いくつかのアプリケーションで使用されるC++DLLがあります。

リリース構成ではすべてが正常に機能しますが、デバッグ構成では、アプリケーションの1つを実行しようとすると、アプリケーションを正しく起動できなかったというエラーダイアログが表示されます。

これは、C++DLLのSxS構成に問題があることがわかりました。何らかの理由で、DLLのマニフェストには次の参照が含まれています。

<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>

また、私のマシンには、VC90ランタイムライブラリのデバッグバージョンがインストールされていません。

以前にも同様の問題が発生したため、使用している外部ライブラリが開発に使用しているのと同じVSバージョンでコンパイルされていることを常に確認します。

しかし、どこかにVC90DebugCRTへの参照があるようです。外部ライブラリでDependencyWalkerとPeStudioを使用してそれを理解しようとしましたが、VC90DebugCRTDllへの参照がどこにも見つかりませんでした。

Dllのリンカー設定でマニフェストファイルの生成を無効にすることで、実際に問題を修正しました。したがって、VC90 DebugCRTは、実際にはアプリケーションを実行するために必要ではありませんが、とにかく何らかの形で引き込まれます。

マニフェストファイルに含める参照をビルドプロセス中にVSがどのように決定し、この参照がどこから来たのかをどのように診断できるのか、今疑問に思っていました。

4

1 に答える 1

0

最初に、「プロパティ/ C ++ /コード生成/ランタイムライブラリ」などの一般的な問題を確認し、依存するアプリケーションとライブラリの両方で「_DEBUG」が定義されていないことを確認してください。それでも見つからない場合は、「リンカー/一般/進行状況の表示」の詳細リンクをオンにして、デバッグcrtで何を探しているかがわかるかどうかを確認します。

于 2011-03-24T10:03:51.900 に答える