SORU
30 EYLÜL 2010, PERŞEMBE


CA2202, nasıl bu davayı çözmek için

Herkes aşağıdaki kodu tüm CA2202 uyarıları kaldırmak için nasıl bana söyleyebilir misiniz?

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 CA2202 uyarı : Microsoft.Kullanımı : Nesne, 'cryptoStream' bir kez daha bertaraf edilebilir yöntem 'CryptoServices.(String, byte[], byte []) şifrelemek'. Bir Sistemin oluşturulmasını engellemek için.Bir nesne üzerinde birden çok kez Elden aramalısın değil ObjectDisposedException.: Çizgiler: 34

8 CA2202 uyarı : Microsoft.Kullanımı : Nesne, 'memoryStream' bir kez daha bertaraf edilebilir yöntem 'CryptoServices.(String, byte[], byte []) şifrelemek'. Bir Sistemin oluşturulmasını engellemek için.Bir nesne üzerinde birden çok kez Elden aramalısın değil ObjectDisposedException.: Çizgiler: 34, 37

Visual Studio Kod Analizi bu uyarıları görmek gerekir (bu değil c# derleyici uyarısı).

CEVAP
1 EKİM 2010, Cuma


Bu durumda uyarıları bastırmak gerekir. İmar ile ilgili kod tutarlı olmalıdır, ve diğer sınıfları oluşturulur ve aynı zamanda Dispose Ara onları tek kullanımlık sahipliğini dikkat gerek yok.

[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")]
public static byte[] Encrypt(string data, byte[] key, byte[] iv) {
  using (var memoryStream = new MemoryStream()) {
    using (var cryptograph = new DESCryptoServiceProvider())
    using (var cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write))
    using (var streamWriter = new StreamWriter(cryptoStream)) {
      streamWriter.Write(data);
    }
    return memoryStream.ToArray();
  }
}

GÜNCELLEME:IDisposable.Dispose belgelerinde bu okuyabilirsiniz:

Eğer bir nesne yöntemi bir kez daha deniyor Atmayın eğer nesne ilk mesajdan sonra tüm çağrıları görmezden gerekir. Nesne eğer yöntemdir Atmayın onun birden çok kez aradım eğer bir istisna atmak gerekir.

Olabilir savundu bu kural var, böylece geliştiriciler istihdam using deyimi akil bir çağlayan tek kullanımlık gibi oldum yukarıda gösterilen (ya da belki bu sadece hoş bir yan etki). Aynı şekilde, daha sonra, CA2202 hizmet vermektedir yararı ve proje-bilge bastırılmış olmalıdır. Gerçek suçlu* *6, CA1065 çaresine bakılmalı hatalı bir uygulama ise sizin sorumluluğunuz altında ise () olur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EmbarkToHeaven

    EmbarkToHeav

    3 EYLÜL 2007
  • failblog

    failblog

    17 HAZİRAN 2008
  • natescamp

    natescamp

    30 NİSAN 2009