7

私は最近、コード コントラクトを使用して、多くの手動の前提条件テストと例外スローを移行しました。.NET 4 にアップグレードする代わりに、Microsoft.Contracts.dllアセンブリを使用していたので、.NET 3.5 をもう少し使い続けることができました (これは、.NET 3.5 アセンブリと .NET 4 アセンブリの両方で使用されるライブラリです)。Visual Studio 2010 でコントラクト リライターをセットアップしましたが、コントラクトは問題なく動作します。

ただし、その切り替えを行ってから、コントラクトを使用するメソッド、特に ContractInvariantMethod を使用するクラスで、デバッガーの動作がおかしくなることに気付きました。実行カーソルが強調表示された行と常に一致するとは限らず、一部のブレークポイントがヒットしないため、デバッガーがローカル変数名を認識できず、CS$1$0000. これはデバッグ ビルドにあります。

Microsoft.Contracts.dllVS10 から .NET 3.5でのコード コントラクトの使用に関する既知の問題はありますか? .NET 4 のコード コントラクトでも同様の問題が発生しますか?

[編集] この質問により、Microsoft Connect でバグを作成することになりました: https://connect.microsoft.com/VisualStudio/feedback/details/573983/code-contract-rewriting-messes-up-local-variable-names-in -iterator-methods-while-debugging

4

2 に答える 2

1

コントラクトの書き換えとは、オンザフライで生成される追加のコードであり、コンパイラがラッチするソース コードを持たないことを意味します。CLR には非常に多くの異なる要素があるため、デバッガーがまったく実行しないか、混乱する可能性がかなりあります。完全なデバッガー サポートの予算を得ることができるのは、広範囲に影響を与える本格的な言語機能だけです。たとえば、ラムダ式のように。

これは、バグを報告することが正当な理由ではないということではありません。まだ完全に開発されていないアスペクトを使用している場合、何かが改善されることを期待すべきではないということです。アーリーアダプターであることには、常にそのようなコストがかかりますが、自慢する権利もあります:-)

于 2010-07-28T13:49:27.237 に答える
0

コード コントラクトは現在、Post 条件とマルチスレッドでは機能しないことに注意してください。コントラクトを制限して、前提条件の書き換えのみを行います。これにより、システムの多くの問題が解決されました。

于 2010-07-09T12:37:33.040 に答える