6

プログラム Reflexil を使用して、実行可能ファイル Foo1.exe 内の参照を Foo2.dll という名前の外部アセンブリに挿入しています。

Foo1.exe には、Bar というクラスがあります。

Foo2.dll には、Bar のすべてのフィールドとメソッドを正しく実装するインターフェイス IBar があります。

Reflexil を使用して、Foo1.exe の Bar に Foo2.dll のインターフェイス IBar を指定しました。

Foo1.exe が読み込まれると、アプリケーション ディレクトリにある Foo2.dll が検出されて読み込まれますが、次のエラー メッセージとともに System.TypeLoadException がスローされます。Method 'get_***' in type 'Foo1.Bar' from assembly 'Foo1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.

同じエラー メッセージ ( TypeLoadException は 'no implementation' と表示されていますが、実装されています)で前の質問を既に読みましたが、コンパイラがない場合に修正を正しく実装する方法を理解できませんでした。 Foo1.exe をチェックします。

ご協力いただきありがとうございます!

4

1 に答える 1

5

次の状況でも同じエラーメッセージが表示されます。A.dllはB.dllに依存し、B.dllはC.dllに依存し、C.dllが見つかりません。私の場合、A.dllには、同じアセンブリと同じdll(A.dll)にある抽象クラスC1から派生したクラスC2が含まれています。C1は、B.dllのC0クラスから派生しています。C0には抽象ゲッターメソッドを持つ抽象プロパティがあり、C1にはこのプロパティの実装がありますが、問題は、プロパティのゲッターの戻り型が存在しないライブラリC.dllで定義されていることです。最後に、「アセンブリ'A、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=xxxx'のタイプ'C2'のメソッド'get_Prop'には実装がありません。」というエラーメッセージが表示されます。これは、この状況ではあまり関係ありません。要するに、ソースコードは次のようになります。

C.dll:

namespace C {
  public enum PropType {V1 = 0, V2 = 1, ...}
}

B.dll:

using C;
namespace B {
  public abstract class C0 {
    ...
    public abstract C.PropType Prop {get;}
  }
}

A.dll:

using C;
using B;
namespace A {
  public abstract class C1 : B.C0 {
    ...
    // Getter implementation
    public override C.PropType Prop { get {return C.PropType.V1;}}
  }
}

using C;
using B;
namespace A {
  // Class implementation
  public class C2 : C1 {
    ...
  }
}

したがって、解決策は、インストールにC.dllを追加することです。

于 2012-06-05T11:23:53.027 に答える