visual valid returns net example documentacion comment comentarios code c# code-inspection

valid - summary returns c#



La inspección del código dice que necesito desechar el objeto. ¿Cúal? (1)

Esta es mi función. Ya envolví el cliente y el mensaje en una cláusula de uso y aún obtengo un error al ejecutar la inspección de código. El error apunta a la primera línea usando:

public static void Send(MailItem mail) { var sender = Membership.GetUser(mail.CreatedBy); if (sender == null) { return; } using (var msg = new MailMessage { From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]) }) { foreach (var recipient in mail.MailRecipients) { var recipientX = Membership.GetUser(recipient.UserKey); if (recipientX == null) { continue; } msg.To.Add(new MailAddress(recipientX.Email, recipientX.UserName)); } msg.Subject = "[From: " + sender.UserName + "]" + mail.Subject; msg.Body = mail.Body; if (HttpContext.Current != null) { msg.Body += Environment.NewLine + Environment.NewLine + "To reply via Web click link below:" + Environment.NewLine; msg.Body += ConfigurationManager.AppSettings["MailPagePath"] + "?AID=" + ContextManager.CurrentAccount.AccountId + "&RUN=" + sender.UserName; } try { using (var emailClient = new SmtpClient()) { emailClient.Send(msg); } } catch (Exception ex) { Logger.LogException(ex); } } }

Esta es la advertencia que recibo:

Advertencia 1 CA2000: Microsoft.Reliability: En el método ''Email.Send (MailItem)'', el objeto ''<> g_ initLocal0'' no se encuentra en todas las rutas de excepción. Llame a System.IDisposable.Dispose en el objeto ''<> g _initLocal0'' antes de que todas las referencias a él estén fuera de alcance. C: / CodeWorkspace / Code / Utility / Email.cs 41


Su problema es esta línea:

using (var msg = new MailMessage { From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]) })

El bloque de inicialización { From = ... } se ejecuta después de que se construye el objeto y antes de que comience try/finally using bloque interno.

Si el constructor MailAddress (o sus expresiones de argumento, o la asignación a From si es un acceso a la propiedad) lanza una excepción, el MailMessage no se eliminará.

Cambiar a:

using (var msg = new MailMessage()) { msg.From = new MailAddress(ConfigurationManager.AppSettings["EmailSender"], ConfigurationManager.AppSettings["EmailSenderName"]); ... }

La variable temporal <>g_initLocal0 es el nombre del MailMessage antes de que se asigne a msg .