CA 2202,如何解决这个案子

CA 2202,如何解决这个案子

有人能告诉我如何从下面的代码中删除所有CA 2202警告吗?

public static byte[] Encrypt(string data, byte[] key, byte[] iv){
    using(MemoryStream memoryStream = new MemoryStream())
    {
        using (DESCryptoServiceProvider cryptograph = new DESCryptoServiceProvider())
        {
            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv),
             CryptoStreamMode.Write))
            {
                using(StreamWriter streamWriter = new StreamWriter(cryptoStream))
                {
                    streamWriter.Write(data);
                }
            }
        }
        return memoryStream.ToArray();
    }}

警告7 CA 2202:Microsoft.Usage:Object‘crypStream’可以在方法‘CryptoServices.Encrypt(字符串、字节[])中多次释放。若要避免生成System.ObjectDisposedException,不应对象调用Dispose超过一次。:行:34

警告8 CA 2202:Microsoft.Usage:Object‘MemyStream’可以在方法‘CryptoServices.Encrypt(字符串、字节[])中多次释放。若要避免生成System.ObjectDisposedException,不应对象调用Dispose超过一次。:行:34、37

您需要VisualStudio代码分析来查看这些警告(这些警告不是c#编译器警告)。


守着一只汪
浏览 607回答 3
3回答

UYOU

嗯,这是准确的,在这些流上的dist()方法将被多次调用。StreamReader类将获得加密流的“所有权”,因此处理StreamWriter也将释放密码流。类似地,CryptoStream类接管内存流的责任。这些并不完全是真正的bug,这些.NET类对多个Dispose()调用具有弹性。但是,如果您想摆脱警告,那么您应该删除这些对象的Using语句。在推理如果代码抛出异常会发生什么时,你会感到有些痛苦。或者用属性关闭警告。或者忽略这个警告,因为它是愚蠢的。
打开App,查看更多内容
随时随地看视频慕课网APP