私はプロジェクトでいくつかのコード分析を行い、意味のある提案を実装している最中です。1つの提案は、次のことを行うことです。
CA2000:Microsoft.Reliability:メソッド'Service.ParseConfigurationFile()'で、オブジェクト' new SecureString()'へのすべての参照がスコープ外になる前に、System.IDisposable.Disposeを呼び出します。
問題のある行は次のとおりです。
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; }
}
これが物事をより明確にすることを願っています...