Was mit dem folgenden code..The gegebenen Code falsch ist, ist nicht Beschwerde bei CA2000: Objekten entsorgen, bevor Umfang verlieren (https://msdn.microsoft.com/library/ms182289.aspx) .. Dieser Code erzeugen die folgende Warnung.NET-Code-Analyse Warnung
Warnung CA2000 In Methode 'CryptoComputer.Encrypt (String, String, String, String)', das Objekt 'new RijndaelManaged()' ist nicht in allen Ausnahmepfaden enthalten. Rufen Sie System.IDisposable.Dispose für das Objekt 'new RijndaelManaged()' auf, bevor alle Verweise darauf den Gültigkeitsbereich verlassen.
public static string Encrypt(string plainText, string passPhrase, string saltValue, string initVector)
{
var initVectorBytes = Encoding.UTF8.GetBytes(initVector);
var saltValueBytes = Encoding.UTF8.GetBytes(saltValue);
var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
string cipherText;
PasswordDeriveBytes password = null;
RijndaelManaged symmetricKey = null;
MemoryStream memoryStream = null;
try
{
memoryStream = new MemoryStream();
password = new PasswordDeriveBytes(passPhrase, saltValueBytes, hashAlgorithm, passwordIterations);
byte[] keyBytes = password.GetBytes(keySize/8);
symmetricKey = new RijndaelManaged { Mode = CipherMode.CBC };
var encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();
var cipherTextBytes = memoryStream.ToArray();
cipherText = Convert.ToBase64String(cipherTextBytes);
}
catch (Exception)
{
throw;
}
finally
{
password?.Dispose();
symmetricKey?.Dispose();
memoryStream?.Dispose();
}
return cipherText;
}
Wie kann ich diesen Code neu schreiben die Microsoft-Richtlinien
Use "mit (...)" für Passwort, SymmetricKey, Memorystream. –
Oder liegt es daran, dass die Analyseschemas von Microsoft die Syntax "password? .Dispose()" nicht erkennen? Was, wenn Sie es als 'if (obj! = Null) umschreiben obj.Dispose();'? – kennyzx
Kennyzx ist wahrscheinlich richtig ... Sie müssen den Code auf die alte Art schreiben oder die falsche Warnung unterdrücken –