問題
私は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が期待どおりに機能する前にそれを呼び出します。
Visual Studioは、特に、ImmutableArray<>
パラメーターを含むインターフェイス上のメソッドへの呼び出し参照を取得しませんが、ImmutableList<>
。を含むメソッドに対しては取得します。ImmutableArray<>
メソッドからparamを削除すると、参照も取得されます。
ソリューションは正常に構築されますが、このエラーがスローされるのは、実行時にJITを試行した場合のみです。
'System.Runtime'にプロジェクト参照を追加すると、すべて正常に機能します。それでおしまい。
VSがプロジェクト参照を自動追加して解決したカルチャーの問題があったことを再現しようとしたときに、問題を解決することになりましたSystem.Runtime
。これにより、より大きな問題が修正されました。VSの参照は現在正常に機能しており、コードは問題なく実行されます。
nullを渡すと、それなしでビルドされSystem.Runtime
ますが、メソッドを呼び出すと、例外がスローされます。ただし、デフォルトを渡そうとすると、ImmutableArray
を追加する必要がありますSystem.Runtime
。これで問題は解決します。
これで問題が解決した理由はわかりませんが、問題は解決しました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加