5

Visual Studio 2010を使用してC#でIE拡張機能を作成しています。InternetExplorerで実行しながら拡張機能をデバッグするにはどうすればよいですか?

4

2 に答える 2

20

非常に印象的なことがいくつかあります。

  1. この質問はよく聞かれます
  2. すべてではないにしても、ほとんどの回答が不完全または不正確です

VS2010で。以下を実行します。

  1. BHO プロジェクトを作成します。良い出発点は次のとおりです: Demo IE Toolbar/BHO
  2. 同様のソリューション/プロジェクトを作成し、「ソリューション エクスプローラー」に移動し、プロジェクトを右クリックするか、Alt+Enter を使用して「プロパティ」に移動します。

プロジェクトのプロパティ

  1. デバッグ プロファイルが選択されていることを確認します。

デバッグ プロファイル

  1. アセンブリを登録するには、いくつかのビルド後のイベントが必要です。

ビルド後のイベントの定義

これらはさまざまなコマンドです。

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe" /u "$(TargetName)"
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe" /f /i "$(TargetPath)"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /unregister /codebase "$(TargetPath)"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /codebase "$(TargetPath)"

順序が重要です。最初にアセンブリが登録解除され、次に登録されます。これを初めて実行すると、これらのビルド後のイベントが失敗するため、ビルドは失敗します。これは正常です。初めてビルドするときはアセンブリが登録されていないため、登録を解除する必要はありません。2 回目のビルドでは、すべてが正常に機能します。この段階で、エラーのないビルドが成功した後、手動で IE を起動すると、BHO が表示されます。

登録されている BHO を確認する

BHO登録IIをチェック

  1. F5また、 を押してすべてをビルドし、IE を開いてデバッガーをアタッチできるようにしたいと考えています。ただし、一般に信じられていることとは反対に、VS 2010 デバッガーは、「デバッグ」で「外部プログラムの開始」を定義している場合でも、単独ではアタッチしません (実際、これはまだ必要です)。

外部の IE を起動

そうすることで IE が起動し、BHO も実行されますが、ブレークポイントはヒットしません。

これを解決するには、次を使用します。

public virtual void SetSite(Object pUnkSite)
    {

#if DEBUG
        Debugger.Launch();
#endif

        ... Other code ...
    }

これにより、BHO ライフサイクルの早い段階でデバッガーがアタッチされます。詳細については、こちらをご覧ください。

ここで押すとF5、アタッチするデバッガーを尋ねるいくつかのダイアログが表示されます。

デバッグダイアログⅠ

デバッグダイアログⅡ

デバッグダイアログⅢ

そこからは、楽しいデバッグです。

ブレークポイントが打てます!

これが役立つことを願っています!

編集

私は最近、私が書いたかなり古い BHO を更新するように依頼されました。自分のチュートリアルを再訪すると、それに従うといくつかの問題が発生する可能性があることに気付きました。

1) VS2010 (リリース済み) を使用して W7 マシンをすばやく展開した後、デバッガーをアタッチしようとすると、ファンキーなエラーが発生しました。

Framweork バージョン エラー!

VS2010 SP1 もインストールすることで問題を解決できました (最初に使用したように) が、なぜこれが起こったのかわかりません。

2) 現在、デバッガーをアタッチしようとすると、プロジェクトを保持している VS2010 のインスタンスが使用可能なデバッガーのリストにありません。

デバッガーがありません!

ただし、すべてのダイアログをキャンセルして IE を再起動すると、実行中のインスタンスが魔法のように存在し、ブレークポイントをもう一度ヒットできます。この問題は、他のユーザーからの質問に関連しているようです。

編集2

リンクされた質問のように、2番目の問題は完全な再起動後に解決されました。

于 2014-06-13T13:49:37.013 に答える
3

プロジェクト + プロパティ、デバッグ タブ。「外部プログラムの開始」を選択し、c:\program files\internet explorer\iexplore.exe に設定します。「コマンド ライン引数」を、BHO を実行する HTML ファイルのパスに設定することをお勧めします。

デバッグするコードにブレークポイントを設定します。F5 キーを押すと、Internet Explorer が起動します。ブレークポイントが中空になっていることがわかります。これは、ブレークポイントがアームされていないことを示しています。IE が DLL をロードするとすぐに、[出力] ウィンドウに表示され、真っ赤に変わります。また、IE がコードを呼び出すと、デバッガーは自動的に中断します。

登録手順があります。gacutil.exe の使用は常に避けてください。マシンの GAC を汚染するだけです。IDE では常に "Register for COM interop" オプションを優先してください。これは、/codebase オプションを指定して Regasm.exe を実行するのと同じです。そのようにGACは必要ありません。いずれにせよ、これらのマシン構成の変更を行うには、VS を管理者特権で実行する必要があります。ショートカットを右クリックし、[管理者として実行] を選択して起動します。

于 2010-11-03T12:26:39.550 に答える