c# - CA2202 ForEach 循环警告
问题描述
fxcop 分析为以下方法主体提供CA2202 警告foreach
:
public void LogAnalysis(IEnumerable<string> steps, bool append = false)
{
if (steps != null)
{
StringBuilder sb = new StringBuilder();
try
{
foreach (string step in steps) // this is line 34
{
sb.AppendLine(step);
}
if (append)
{
sb.Insert(0, string.Format(
CultureInfo.InvariantCulture,
"__________Logging started at {0}__________\n",
DateTime.Now.ToString(CultureInfo.InvariantCulture)));
File.AppendAllText(AnalysisLogFile, sb.ToString());
}
else
{
File.WriteAllText(AnalysisLogFile, sb.ToString());
}
}
catch (Exception e) when (e is IOException || e is UnauthorizedAccessException)
{
LogError(e.Message);
}
sb.Clear();
}
}
警告 CA2202 对象“steps.GetEnumerator()”可以在方法“LoggingService.LogAnalysis(IEnumerable, bool)”中多次处理。为避免生成 System.ObjectDisposedException,您不应在对象上多次调用 Dispose。:行:34
我做了一些研究,发现嵌套 using
语句和Dispose
调用会导致分析器发疯并发出此警告,但我既没有显式 Dispose
调用也没有using
块。foreach
我还没有遇到过循环弹出此警告的另一种情况。我知道如何抑制警告,但我只是想了解这可能是什么原因?
解决方案
根据 canton7 的评论,我意识到当您使用菜单分析>运行代码分析强制进行代码分析时,即使您安装了新的 Roslyn Nuget Package ,它也会强制使用旧的二进制 fxcop 。新的分析器在构建时自动使用,当我使用新的分析器时,问题中提到的警告消失了。
推荐阅读
- gradle - Gradle 4+ 无法解析来自自定义 Maven 存储库的快照依赖项
- tensorflow - 如何在旧版本的 tensorflow - v1.3.0 中使用对象检测 API?
- python - 标记句子时出现AttributeError
- php - Yii2从下拉列表中选择某些项目时自动输入
- python - TypeError:在读取文件并尝试绘制值时,只能将长度为 1 的数组转换为 Python 标量
- android - 为什么 volley 库不能在 android 9(API 28)上运行,而它在 android 8(API 27)上运行良好?
- hyperledger-fabric - 链码对等体重新启动
- docker - 加入从节点并添加 cni 后从节点未准备好但主节点已准备好
- c# - 文本上的垂直对齐未正确对齐
- angular - 最初将 Angular2-DatePicker 设置为空