我有一個函數(請參閱下面的代碼片段)。我無法獲取代碼分析規則CA2202固定
我啓用了代碼分析功能,並且違反了CA2202規則。
(編輯:我添加的pdfStamper收盤否則PDF會損壞)
CA2202:多次
的方法實現包含的代碼路徑可能導致不處置的對象對同一對象多次調用IDisposable.Dispose或Dispose等價物(如某些類型的Close()方法)。
在CA2202 MSDN頁面(here)中,建議的修復程序不起作用。
如何重寫代碼而不必抑制這種違規行爲?
private byte[] DoGenerateFinishedGamePdf(int gameSessionLogId)
{
var finishedGameCertificatePdfFile = httpServerUtilityWrapper.MapPath(ConfigurationManager.AppSettings["FinishedGameCertificateFile"]);
var pdfReader = new PdfReader(finishedGameCertificatePdfFile); // note that PdfReader is not IDisposeable
using (MemoryStream memoryStream = new MemoryStream())
using (PdfStamper pdfStamper = new PdfStamper(pdfReader, memoryStream))
{
var fields = pdfStamper.AcroFields;
fields.SetField("CityName", "It works!");
pdfReader.Close();
pdfStamper.FormFlattening = true;
pdfStamper.FreeTextFlattening = true;
pdfStamper.Close();
return memoryStream.ToArray();
}
}
這很奇怪。我使用一次性對象,我從來沒有收到處置警告。你正在收到這個memoryStream或pdfStamper? – 2013-04-05 11:31:10