.NET Core 中的重复错误消息 - 错误 CS0116

Duplicate error messages in .NET Core - error CS0116

重现步骤

dotnet new console
(introduce a bug in Program.cs)
dotnet restore
dotnet build

典型的输出是:

Microsoft (R) Build Engine version 15.1.548.43366 Copyright (C) Microsoft Corporation. All rights reserved.

Program.cs(5,5): error CS0116: A namespace cannot directly contain members such as fields or methods [/Users/xxx/Documents/myproj/myproj.csproj]

Build FAILED.

Program.cs(5,5): error CS0116: A namespace cannot directly contain members such as fields or methods [/Users/xxx/Documents/myproj/myproj.csproj]
    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:01.77

可以看到错误CS0116报了两次

有没有办法避免重复报错?

您可以创建自己的 MSBuild 记录器,而不是使用默认的控制台记录器。 Build loggers.

里面有很好的说明

基本上,您可以制作自己的记录器来捕获所有数据,然后在最后发出一个简单的摘要。

dotnet build /noconsolelogger /logger:YourCustomLogger.dll

第二个错误是控制台记录器摘要的一部分。这可以通过将 /clp:NoSummary 传递给 msbuild 来禁用。但是,当它是 dotnet build 的第一个 MSBuild 参数时,当前 CLI 中存在错误。在它之前添加任何其他 MSBuild 命令以使其工作。既然你想减少冗长,让我们只使用 /nologo 作为解决方法:

dotnet build -c Release /nologo /clp:NoSummary

但是,如果您直接使用 MSBuild,效果会很好:

dotnet msbuild /clp:NoSummary /p:Configuration=Release

在即将发布的 2.0.0 版本中,CLI 始终覆盖 dotnet build 的摘要参数,因此您必须改用 dotnet msbuild(我在那个)。