2010-11-25 27 views
1

私は現在、VB .NET(VS 2010およびVS 2008)の一部の拡張メソッドでパートタイム(および厄介な)バグを扱っています。拡張メソッドのパートタイムバグ

一般的な目的で作成した「フレームワーク」プロジェクトの拡張メソッドを使用するクライアントプロジェクトがあります。

しかし、いつかソリューションを起動しようとすると、拡張メソッド "ターゲットオブジェクトのメンバーではありません"というエラーの長いリストが表示されます。

これが発生した場合でも、エラーは発生せずにソリューションを再構築できますが、プロジェクトを再開すると同じエラーが再び発生します。

は、これまでのところ私は2回避策

A)エラーで(コンパイルし、タグを削除、拡張メソッドの定義に移動します)、タグを戻すがあります。

B)Visual Studioを閉じてもう一度開きます。

この問題を解決する方法はありますか?

答えて

4

Connectでこの問題のactive bug reportがあります。彼らが社内で問題を再現できるようにするための具体的な手順があるプロジェクトである、レプロの緊急な必要性があります。おそらくあなたはそれを解決するために、または回避策を推奨するために必要なものを手助けすることができます。

編集:私はこれを投稿して以来、この回答に遅れをとって、IntelliSenseパーサーがコンパイラとは異なる動作をする問題を指摘しています。マルチターゲティング機能、特にVS2010では.NET 4のClient Profileオプションによってトリガーされる問題があります。これは新しいプロジェクトのデフォルトです。何が問題になるのは、一般的にSystem.Webに依存しているため、完全なプロファイルを必要とするアセンブリ参照を追加することです。あなたは警告を受けるでしょうが、それはすぐに大量のエラーで吹き飛ばされます。この修正は、プロジェクトのフレームワークターゲットをクライアントからフルに変更することです。

0

通常のビルドソリューションではなく、「ソリューションの再構築」を実行するのに時間がかかります。この問題に遭遇するたびに、これはいつも私のために働いています。

3

最近この問題が発生しました。私のプロジェクトはうまく構築されますが、Rebuiltオプションを使用しようとすると、拡張メソッドが拡張されたオブジェクトに見つからないというエラーが発生します。

エクステンションメソッドを使用してクラスの先頭にインポートを含めることで、この問題を修正することができました。

ので、ファイルの先頭に私が実際に

輸入は、私がこれを必要とする理由は分からないが、それは私の場合は問題を修正

をproject_name.extension_moduleています。私はこれが私と同じくらい多くの時間を無駄にしている他の誰かを助けることを願っています!

リアム

0

私たちは非常に似ています。タイプAを拡張するコール拡張機能merhodは、実際には、インターフェースCを実装するタイプBのインスタンスです。インターフェースCには、拡張メソッドと同じ名前のメソッドがあります。

インターフェースC AはC (CなどA).fooという

デバッグする場合の方法はFoo クラスBはA実装C

静的クラス 静的メソッドはFoo(このA) から継承を宣言

AがCの場合は実際にFooを複数回呼び出し、アセンブリレベルでステップして比較を行っていることを確認できます。呼び出しが行われることを示す方法FooはSQL文を実行し、Fooにコードを実行するSQLプロファイラを見ることができます。

Cを反射に変更し、バグが消えます。または、デバッガの隠し/ステップスルーを使用し、バグをマスクします。また、SQLプロファイラを微調整すると、各アセンブリ文に対して複数回(Fooが実際に呼び出される前に)呼び出されるようになります。