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

解决方法是将流转换为字节[],它解决了问题。

    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 回答