詳細な調査: TypeLoadException 例外、メソッドは明らかに実装されていますが、プロンプトがありません
ターゲット:
実際にはメソッドが存在するのにメソッドが欠落していることを示す TypeLoadException
例外の根本原因を特定します。
質問:
テスト マシンは次のエラーをスローしました:
<code>System.TypeLoadException: 类型 'DummyItem' 中的方法 'SetShort'(来自程序集 'ActiveViewers (...)')没有实现。</code>
理由:
このエラーは、実装アセンブリのビルド プロセス中に参照されるインターフェイス アセンブリのバージョンが古いことが原因で発生します。
技術的な説明:
-
インターフェイス ベースの実装: この例では、'DummyItem' クラスが別のアセンブリにインターフェイスを実装します。
-
バージョンの違い: 最近、「SetShort」メソッドがインターフェイス クラスと実装クラスに追加されました。ただし、実装アセンブリが再構築されると、新しいバージョンのインターフェイス アセンブリは参照されません。
-
リンクがありません: したがって、'SetShort' メソッドは実装クラスに存在しますが、対応する実装が参照されるインターフェイス アセンブリにありません。したがって、
TypeLoadException
例外がスローされます。
解決策:
-
クリーンと再構築: すべての「bin」ディレクトリと「obj」ディレクトリを削除し、すべてのアセンブリを再構築します。これにより、正しい DLL バージョンが使用されるようになります。
-
正しいインターフェイス参照: 再構築プロセス中に、実装アセンブリがインターフェイス アセンブリの最新バージョンを参照していることを確認します。これにより、実装クラスの「SetShort」メソッドがインターフェイス内の同等のメソッドとリンクされます。
デモ:
問題を再現するには:
- 「GetString」メソッドを含むインターフェイス アセンブリを作成します。
- インターフェイス アセンブリを参照し、「GetString」メソッドを含む実装クラス ライブラリを作成します。
- 両方のアセンブリを参照し、「GetString」メソッドを呼び出すクライアント アプリケーションを作成します。
- アプリケーションを実行して動作を確認します。
- インターフェイスおよび実装アセンブリに新しい 'GetShort' メソッドを追加します。
- 更新されたインターフェイス アセンブリを参照せずに実装アセンブリを再構築します。
- 新しい DLL でクライアント アプリケーションを更新し、再構築します。
- クライアント アプリケーションを実行し、「GetShort」の
TypeLoadException
例外を確認します。
追加のヒント:
- アセンブリのバージョン番号を確認して、参照が正しいことを確認してください。
- 依存関係管理ツールを使用して、アセンブリの依存関係を追跡します。
- ログ記録メカニズムを使用して、バージョンの不一致を特定します。
以上がメソッドが実装されているにもかかわらず、コードで TypeLoadException がスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。