2012-02-16 8 views
2

プロジェクトのプロパティの[Code Contracts]タブで[Contract Reference Assembly]を[Build]に設定すると、出力フォルダの "CodeContracts"サブフォルダに2つの追加ファイル( "MyAssembly"という名前のアセンブリ)が作成されます。コードコントラクトがMyAssembly.Contracts.pdbファイルを生成するのはなぜですか?

MyAssembly.Contracts.dll 
MyAssembly.Contracts.pdb 

最初のファイルにはすべての契約メタデータが含まれており、その使用法を理解しています。私が理解していないのは、2番目のファイル(.pdb)が作成された理由、および契約メタデータのコンシューマーがそれを必要とするかどうか(例:別のソリューションのコードコントラクト自体、コードコントラクトエディタ拡張機能など)

メタデータの他のコンシューマを正しく動作させるには、.pdbも含める必要がありますか、まったく必要ありませんか?

+0

デバッグ外では必要ありません。 http://msdn.microsoft.com/en-us/library/yd4f8bd1.aspxを参照してください。 –

+0

可能な複製[pdbファイルの目的は何ですか?](http://stackoverflow.com/questions/3582751/what-is-the-purpose-of-pdb-files) –

+0

@Igby:それ以降アセンブリにはコードが含まれていないし、実行またはデバッグすることすらできません。そのPDBの目的は何ですか?なぜそれも生成されますか?そして、コントラクトアセンブリの全目的は、まさにPDBに含まれるメタデータを提供することなので、実際のDLLが提供しない有用なメタデータを提供しますか? –

答えて

3

私はこの問題をCode Contracts MSDNフォーラムに掲載し、Manuel Fahndrichからの回答を得ました。

静的チェッカーは、生成されたpdbファイルを使用して、ソースコードで違反した契約を指し示します(PDBはIL - >ソースコードのマッピングに使用されます)。これは、ソースコードなしで契約書pdbはほとんど使用されていないので、.Contracts.pdbを第三者に出荷する必要はなく、.Contracts.dllのみが契約書を書いた人にとって役に立ちます。

関連する問題