使用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());
}
这是在警告您,您正在创建一个仅在函数中使用的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)
{
...
}