3

問題

2 つのそれぞれの dll に以下のコードがあります。dll1 は dll2 に依存します。

DoWork()呼び出されると、正常に実行されmyInterface.MyListMethod(ImmutableList<byte>.Empty);ます。実行しようとするmyInterface.MyArrayMethod(ImmutableArray<byte>.Empty);と、次の例外がスローされます。

Exception:System.MissingMethodException: Method not found: Namespace.MyArrayMethod(System.Collections.Immutable.ImmutableArray'1<Byte>)

dll1.dll

public class TestClass
{
    public void DoWork()
    {
        IMyInterface myInterface = new MyInterface();
        myInterface.MyListMethod(ImmutableList<byte>.Empty);
        myInterface.MyArrayMethod(ImmutableArray<byte>.Empty);          
    }
}

dll2.dll

public class MyInterface : IMyInterface
{
    public void MyArrayMethod(ImmutableArray<byte> byteArray)
    {
        // Do stuff
    }

    public void MyListMethod(ImmutableList<byte> byteList)
    {
        // Do stuff
    }
}
public interface IMyInterface
{
    void MyArrayMethod(ImmutableArray<byte> byteArray);
    void MyListMethod(ImmutableList<byte> byteList);
}

テスト

私の観点からは、ImmutableArray<>上記のように、Immutable 名前空間の他の型を含む複数の型でこれを試したので、それは問題があるようです。ImmutableArray<>私が試した範囲でのみ発生します。

また、両方の dll が現在の dll であり、古いキャッシュ バージョンが gac にぶら下がっていないことも確認しました。別のメソッドを持つようにインターフェイスを更新し、MyArrayMethod が期待どおりに機能する前にそれを呼び出します。

ImmutableArray<>Visual Studios は特に、 paramを含むインターフェイスのメソッドへの参照の呼び出しを検出しませんが、 ImmutableList<>. ImmutableArray<>メソッドからパラメーターを削除すると、参照も取得されます。

MyArrayMethod には参照が 1 つしかありません

ソリューションは正常にビルドされますが、このエラーがスローされるのは、実行時に JIT を試行した場合のみです。

4

1 に答える 1

1

「System.Runtime」へのプロジェクト参照を追加すると、すべて正常に動作します。それでおしまい。

問題を再現しようとしたときに、VSが自動的にプロジェクト参照を追加した文化の問題があったため、問題を解決することになりましたSystem.Runtime。これにより、より大きな問題が修正されました。VS の参照は現在正常に機能しており、コードは問題なく実行されます。

null を渡すとビルドされますSystem.Runtimeが、メソッドを呼び出すと例外がスローされます。ただし、デフォルトを渡そうとImmutableArrayすると、System.Runtime. これで問題は解決します。

これで問題が解決した理由はわかりませんが、解決しました。

于 2016-03-29T05:57:59.333 に答える