我正在对一个项目进行代码分析,并实现有意义的建议。其中一个建议是执行以下操作:
有问题的行如下:CA2000:Microsoft.Reliability:在方法'Service.ParseConfigurationFile()'中,调用System.IDisposable.Dispose释放对象'new SecureString()',并使所有对它的引用超出范围
Password = me.Password.Aggregate(new SecureString(), (secureString, c) => { secureString.AppendChar(c); return secureString; })
有没有关于如何正确处理这个的想法?我已经用下面的行替换了上面的行,但我认为它并不正确,因为它仍然会导致代码分析消息出现:
Password = me.Password.Aggregate(new SecureString(), (secureString, c) => { using (secureString) {secureString.AppendChar(c); return secureString;} })
编辑:根据下面@Jon的评论,objectInstance是一个名为MailboxElement(me)的自定义类实例。它正在通过配置文件中的多个自定义部分,其格式如下:
foreach (MailboxElement me in mailboxesSection.Mailboxes)
{
MailboxInformation mailboxInformation = new MailboxInformation
{
ExchangeServerWebServiceUrl = me.ExchangeServerWebServiceUrl,
MailboxFriendlyName = me.FriendlyName,
UserName = me.UserName,
Password = me.Password.Aggregate(new SecureString(), (secureString, c) => { secureString.AppendChar(c); return secureString; }),
MailboxToAccess = me.MailboxToAccess
};
// Do stuff with mailboxInformation here
}
MailboxElement
是一个密封类,实现了ConfigurationElement,具有上述所有属性。
MailboxInformation
定义如下:
public class MailboxInformation
{
public string MailboxFriendlyName { get; set; }
public string UserName { get; set; }
public SecureString Password { get; set; }
public string ExchangeServerWebServiceUrl { get; set; }
public string MailboxToAccess { get; set; }
public string InboxFolderId { get; set; }
public string SentItemsFolderId { get; set; }
public bool MailboxSettingsDiscovered { get; set; }
}
我希望这能使事情更清晰明了...
objectInstance.Password
是什么以及这段代码的目的,那将会很有帮助。 - JonPassword
做的任何操作都可能会导致什么情况?LINQ本身不应该导致任何丢失的SecureStrings
,所以要么代码分析器不够智能以意识到这一点,要么你正在放弃Password
。 - Rawling[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000: Dispose objects before losing scope. This is a broken rule. See https://dev59.com/WXE85IYBdhLWcg3wnU-p for more")]
- noonand