使用VS2010运行StyleCop时出现CA2000 Microsoft可靠性错误

本文关键字:CA2000 Microsoft 可靠性 错误 VS2010 运行 StyleCop 使用 | 更新日期: 2023-09-27 17:57:32

用这个文件写代码,

try
{
    FileStream aFile = new FileStream(doFilePath, FileMode.OpenOrCreate);
    StreamWriter sw = new StreamWriter(aFile);
    sw.WriteLine(templateString, fileNameList, topLevelTestbench);
    sw.Close();
}
catch (IOException e)
{
    Console.WriteLine("An IO exception has been thrown! {0}", doFilePath);
    Console.WriteLine(e.ToString());
    Console.ReadLine();
    return;
}

我收到了StyleCop的错误消息。

Error   6   CA2000 : Microsoft.Reliability : 
In method 'DoFile.Generate(string, string, string)', call System.IDisposable.Dispose
on object 'aFile' before all references to it are out of scope.

代码可能出了什么问题?

已添加

当我在没有区域性信息的情况下使用Format方法时,我再次从StyleCop中得到错误。有了这个代码,它就可以工作了。

using System.Globalization;
try  
{   
    string line = String.Format(CultureInfo.InvariantCulture, templateString, fileNameList, topLevelTestbench);   
    File.AppendAllText(doFilePath, line); 
}  
catch (IOException e)            
{
    Console.WriteLine("An IO exception has been thrown! {0}", doFilePath); 
    Console.WriteLine(e.ToString()); 
}

使用VS2010运行StyleCop时出现CA2000 Microsoft可靠性错误

这是在警告您,您正在创建一个仅在函数中使用的IDisposable实例,而没有正确调用它上的Dispose。这是由于您使用了FileStream实例。解决此问题的正确方法是使用using

using (FileStream aFile = new FileStream(doFilePath, FileMode.OpenOrCreate)) {
  StreamWriter sw = new StreamWriter(aFile);
  sw.WriteLine(templateString, fileNameList, topLevelTestbench);
  sw.Close();
}

编辑

注意:一个更简单的方法是使用File.AppendAllText

try 
{
  var line = String.Format(templateString, fileNameList, topLevelTestbench);
  File.AppendAllText(doFilePath, line);
} 
catch (IOException e)
{
  ...
}