IDispose和最佳实践

时间:2015-12-22 15:10:29

标签: c#

我使用了代码分析工具,它提供了以下警告

  

严重级代码描述项目文件行抑制状态   警告CA2202对象'stream'可以多次处理   方法'Cipher.Encryptor(string)'。为了避免产生   System.ObjectDisposedException你不应该调用Dispose   一次在一个物体上:线:43服务   Layer ... \ Cipher.cs 43 Active

它起源于“权力之塔”:

    public static string Encryptor(string input)
    {
        var content = String.Empty;

        var cipher = new RijndaelManaged();
        var plain = Encoding.Unicode.GetBytes(input);
        var key = new PasswordDeriveBytes(password, salt);

        using (var encrypt = cipher.CreateEncryptor(key.GetBytes(32), key.GetBytes(16)))
        using (var stream = new MemoryStream())
        using (var cryptographic = new CryptoStream(stream, encrypt, CryptoStreamMode.Write))
        {
            cryptographic.Write(plain, 0, plain.Length);
            cryptographic.FlushFinalBlock();
            content = Convert.ToBase64String(stream.ToArray());
        }

        return content;
    }

在这种情况下,我正在使用MemoryStreamCryptoStreamICryptoTransform。为什么Visual Studio的代码分析会将此标记为警告?这来自Visual Studio 2015中的内置代码分析。

=================

这是一个较短的复制品:

using System.IO;
using System.Security.Cryptography;

namespace ClassLibrary1
{
   public class Class1
   {
      void foo()
       {
          using (var memStream = new MemoryStream())
          using (var xForm = new FromBase64Transform())
          using (var cStream = new CryptoStream(memStream, xForm, CryptoStreamMode.Read))
             ;
       }
   }
}

......这可以在VS2013 Up5中看到

0 个答案:

没有答案