如何在命令行中显示C#(分析器)建议?

5
我喜欢dotnet CLI的一个特点,就是你可以运行$ dotnet build --no-incremental,然后你总是可以得到项目中所有警告的列表。我用它来进行大规模的更改等操作。这个输出可以被管道传递给Unix工具,以进行进一步处理。
我也想在Visual Studio中获得这种“建议”。这是否可能,如何实现?
建议是指Visual Studio中“错误列表”中显示的“消息”(见下图)。编译器将其称为“不表示问题的信息”(DiagnosticSeverity.Info),EditorConfig将其称为建议(EditorConfigSeverityStrings.Suggestion)。 enter image description here 如何复现?
一个最小化的复现步骤是创建一个新的控制台应用程序,并添加一个带有私有字段的新类,但是不要将其设置为readonly(见下文)!这将触发IDE044(如截图所示),但在运行$ dotnet build --no-incremental时不会显示。如果您通过.editorconfig文件覆盖了严重程度,则建议会显示,但显然是作为警告。
public class Class1
{
    private string Foo = "bar";
}

.editorconfig

[*.cs]

# IDE0044: Add readonly modifier
dotnet_diagnostic.IDE0044.severity = warning


侧边栏:我在寻找什么?
我正在寻找一些"非常规"的东西,比如$ dotnet build ...。然而,如果不可能的话,我也可以使用第三方全局工具,比如Roslynator命令行界面(我曾经尝试过这条路,但没有成功)。
我很清楚,你可以使用Roslyn API编写自定义工具,但我认为这非常脆弱,因为你需要考虑到所有包恢复、查找MSBuild等复杂性。我认为这真的应该是一个开箱即用的东西,否则就应该在项目上游提出问题。
1个回答

3

我不知道是否适用于您,但您可以使用项目上的 ErrorLog 属性 将所有诊断输出到 SARIF 文件。


太棒了!虽然有点复杂,因为你不能在标准输出上获得输出,所以需要一些 shell 魔法。但是,这总比没有好,绝对有帮助。谢谢! - Ties
SARIF 不应该直接被人类使用,其目的是让工具进行处理。 - Paulo Morgado
我明白。我已经进行了一些测试,但是分析器违规并没有出现在SARIF文件中,因此到目前为止我不接受这个答案。 - Ties
1
如果你正在寻找IDE诊断工具,你需要添加Microsoft. CodeAnalysis.CSharp.CodeStyle才能让编译器执行此操作,而不是在Visual Studio中进行。 - Paulo Morgado
不一定,只要是在Visual Studio中显示的任何类型的“消息”即可。但是,您的评论揭示了为什么我的复制停止工作。我最初使用的是我明确添加的分析器(来自xUnit的分析器包),但对于我的复制场景,我想要一个最简单的示例,并切换到了一个IDE????违规。当我使用xUnit的违规行为时,它确实起作用:tada:这样,我也了解了CodeStyle包。谢谢! - Ties
我刚刚发现这个包其实并不需要。CodeStyle分析器默认是禁用的,但是有一个MSBuild属性可以启用它们:EnforceCodeStyleInBuild ;) - Ties

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接