11

すべてが同じ名前空間にあるわけではなく、複数のプロジェクトで構成される Visual Studio (2008) ソリューションがあります。ソリューションをビルドすると、最上位プロジェクトTopProjectで使用されるすべての DLL ファイルがTopProject\bin\debugフォルダーにコピーされます。ただし、対応する .pdb ファイルは、他の一部のプロジェクトに対してのみコピーされます。これは、たとえばNDependを使用する場合など、苦痛です。

Visual Studio はどの .pdb ファイルを上位レベルの bin\debug フォルダーにコピーするかをどのように決定しますか? Visual Studioに他のものもコピーさせるにはどうすればよいですか?


参照は次のとおりです。すべての DLL ファイルは、PDB ファイルなしで中央の場所にコピーされます。TopProject には、これらのコピーされた DLL ファイルへの参照しかありません。ただし、DLL ファイル自体は明らかに PDB ファイルの場所を認識しており、(ほとんどのファイルは)debugフォルダーに正しくコピーされます。

4

4 に答える 4

11

MSDNから:

プログラム データベース (PDB) ファイルには、プログラムのデバッグ構成のインクリメンタル リンクを可能にするデバッグおよびプロジェクトの状態情報が保持されます。/ZI または /Zi を使用して C/C++ プログラムをコンパイルするか、/debug を使用して Visual Basic/C#/JScript .NET プログラムをコンパイルすると、PDB ファイルが作成されます。

したがって、ここでの「問題」(より適切な言葉がないため) は、一部の DLL がデバッグ モードでビルドされている (したがって、PDB ファイルを発行している) ことと、一部がリリース モードでビルドされている (したがって、PDB を発行していない) ことです。ファイル)。その場合は、簡単に修正できます。各プロジェクトに移動して、ビルド設定を更新します。コマンドラインオプションを微調整していない場合、これがデフォルトのシナリオです。

ただし、そうでない場合は、よりトリッキーになります。おそらく、皆さんはリリース モードまたはデバッグ モードになっているでしょう。ここで、各プロジェクトのコマンド ライン コンパイル オプション (プロジェクト プロパティで指定) を確認する必要があります。デバッガーが必要な場合は適宜 /debug に更新するか、不要な場合は削除してください。

編集に応じて編集

はい、DLL ファイルは PDB ファイルがあり、それらへのパスがあることを「認識」していますが、それはあまり意味がありません。他の人が述べたように、特定のディレクトリに DLL ファイルだけをコピーしても、この問題は解決されません。PDB ファイルも必要です。

特定の「バンドル」タイプのファイルを除いて、Windows で個々のファイルをコピーしても (これに対する Microsoft の用語はわかりませんが、「完全な HTML パッケージ」が概念です)、関連ファイルはコピーされません。DLL ファイルは「バンドル」方式でアセンブルされないため、コピーすると PDB ファイルが残ります。

唯一の答えは、DLL ファイルをこれらの中央の場所に取得するためのプロセスを更新し、PDB ファイルを含めることだと思います...ただし、それが間違っていることを証明したいと思います!

于 2008-09-25T11:30:07.470 に答える
3

溶液を洗浄するときに、実際に洗浄されていることを確認してください。

Visual Studioはbin\debug、クリーニングした後でもファイルがディレクトリに残っているのを見てきました。bin\debugすべてのプロジェクトのディレクトリを削除して、再構築します。

于 2008-09-25T12:07:33.213 に答える
3

他の投稿が言っているように、コンパイラ/破損の問題がある可能性があります。

ただし、Willが述べたように、PDBファイルが作成されているが、必要な場所に表示されない場合は、ビルド後の手順を作成します。これが、ソリューション内のすべてのプロジェクトに対して定義するビルド後の手順です。すべての出力ファイルが共通のディレクトリにコピーされていることを確認します。

プロジェクトファイルが\SolutionDir\ ProjDirにある場合、ビルド後の手順の最初の行で、出力ファイルが\ Solution \ Bin\Releaseまたは\Solution\ Bin\Debugにコピーされます。これがデバッグビルドの場合、2行目はPDBファイルをコピーします。リリースビルド用にPDBファイルをコピーしません。

そのため、\ SolutionDir\Binにはすべての出力ファイルが1か所に含まれるようになりました。

xcopy /r /y $(TargetPath) $(ProjectDir)..\$(OutDir)
if $(ConfigurationName) == Debug xcopy /r /y $(TargetDir)$(TargetName).pdb $(ProjectDir)..\$(OutDir)
于 2008-09-25T12:09:54.033 に答える
3

まず、何も仮定しないでください。ソリューションを消去し、デバッグ モードで再構築して、すべての PDB ファイルが作成されているかどうかを確認します。そうでない場合、それはあなたの問題です。

それらが作成されていて、すべてがコピーされていない場合は、PDB ファイルを目的の場所に手動でコピーするビルド後のイベントを作成することで、これを回避できます。もちろん、これは単なる回避策です。

他に考えられる唯一のことは、ソリューション ファイルが破損していることです。.sln を XML ファイルとして開き、内容を調べることができます。期待どおりに動作しているプロジェクトの構成を確認し、そうでないプロジェクトと比較します。何も表示されない場合は、プロジェクト レベルでこれを繰り返す必要があります。動作している .csproj (または何でも) プロジェクト ファイルと動作していないプロジェクト ファイルを比較します。


edit に応じて編集:

手動でコピーするだけの場合は、PDF ファイルも手動でコピーします。DLL ファイルは、PDB ファイルについて何も「知らない」べきではないと私は信じています。それらを宛先ディレクトリに貼り付けて、コーヒーを飲みに行きます。リラックス。

于 2008-09-25T11:44:57.980 に答える