MSHTML アセンブリ参照を選択し、その Path プロパティを確認すると、問題が表示されます。
C:\WINDOWS\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a\Microsoft.mshtml.dll
これは、VS がインストールされている任意のプログラマーのマシンにインストールされる、mshtml タイプ ライブラリの PIA です。バージョン 7.0.3300 は .NET 1.0 時代のバージョン番号で、14 歳です。もちろん、IE11 より前のバージョンです。そのため、新しいインターフェイス タイプはありません。PIA を使用することは決して間違ったことではありません。これにより、プログラムが IE のどのバージョンでも、IE6 にまでさかのぼって実行されることが保証されます。
IE11 タイプ ライブラリから独自の相互運用ライブラリを生成する必要があります。Visual Studio コマンド プロンプトを実行し、プロジェクト ディレクトリに移動して、次のコマンドを入力します。
Tlbimp c:\windows\system32\mshtml.tlb /out:Interop.mshtml.dll
それはかなり長い間取り乱し、それは大きなものであり、存在するPIAと、.NETプログラムから直接使用できないいくつかのあいまいなメソッドとタイプに関するいくつかの警告を吐き出します。それらは無視できます。PIAでも機能しませんでした。
これで、プロジェクト ディレクトリに Interop.mshtml.dll ファイルが作成されました。VS に戻り、古い MSHTML 参照を削除し、[プロジェクト] > [参照の追加] > [参照] を使用して、作成したばかりの新しい参照を選択します。その "Embed Interop Types" プロパティはデフォルトで True であり、もはや PIA はまったく必要なく、プログラムでファイルを展開する必要はありません。ファイルをソース管理にチェックインして、一度だけ実行する必要があります。
また、必要なバージョンの IE がインストールされていないマシンで実行すると、プログラムが E_NOINTERFACE 例外で終了する可能性があることに注意してください。演算子を使用しas
てドキュメント参照を IHtmlDocument7 にキャストできます。IE が古い場合は null になります。