3

Windows 10 アプリでHashLib ライブラリを使用しようとしていますが、未処理の例外 ( System.MethodAccessException)がスローされます。

メソッド 'HashLib.Hash.TransformStream(System.IO.Stream, Int64)' によるメソッド 'System.Collections.Concurrent.ConcurrentQueue`1..ctor()' へのアクセスに失敗しました。

それ以上の情報はありません。例外をスローする正確な行は、Hash.cs という名前のHashLibのソース ファイルの380 行目です。

System.Collections.Concurrent.ConcurrentQueue<byte[]> queue = new System.Collections.Concurrent.ConcurrentQueue<byte[]>();

MSDN でこの問題に関する手がかりが見つかりません。ポータブル クラス ライブラリでもサポートされていることがわかったので、通常の Windows 10 アプリでも動作するはずです。まったく同じコードが正常に使用され、WPF アプリケーションと Windows 8.1 アプリ内で問題なくテストされました。

4

1 に答える 1

0

回避策は、ストリームを byte[] に変換することです。これで問題が解決します。

    public static string MakeHashForFile(Stream fileStream)
    {
        //HashResult hashResult = hashImplementation.ComputeStream(fileStream);
        byte[] bytes = GetBytesFromStream(fileStream);

        HashResult hashResult = hashImplementation.ComputeBytes(bytes);

        return hashResult.ToString().Replace("-", String.Empty).ToLowerInvariant();
    }

    private static byte[] GetBytesFromStream(Stream stream)
    {
        byte[] result;
        using (MemoryStream reader = new MemoryStream())
        {
            stream.CopyTo(reader);
            result = reader.ToArray();
        }
        return result;
    }
于 2016-12-19T09:06:54.033 に答える