为什么在Visual Studio中默认情况下警告CS0108&CS0114 * NOT *错误?

问题描述 投票:0回答:2

警告CS0108在与基本类中的变量声明了相同名称的情况下跳闸。警告CS0114与方法等效。

两者都标记为警告,而不是错误。编译继续,可执行文件可以运行。

但是风险是逻辑错误或错误,其中错误的错误被调用。

这在现场生产环境中非常危险。

调试时也非常“不明显”:单步执行时,代码看起来像是在做正确的事情,但事实并非如此。该错误可能要花很长时间才能识别出大量抽象/继承的代码库。

当然,“ new”关键字的存在是有原因的,并且(甚至可以肯定)关键字的使用应由编译错误(不仅仅是警告)来实施。

但是事实并非如此。您必须在解决方案中的每个项目上手动进行设置。甚至不可能在整个解决方案范围内强制执行。

而且我还没有找到一种方法来使它成为新解决方案的默认行为。

为什么?

c# visual-studio compiler-errors compiler-warnings
2个回答
2
投票

Visual Studio默认情况下将使程序无法编译的所有情况都视为错误。由于这些注意事项不会影响编译,而只会影响代码的质量,因此将它们视为警告。但是正如Styxxy指出的那样,您可以将喜欢的任何警告都视为错误。


1
投票

您实际上可以将警告设置为错误解决方案(种类广泛)。唯一的限制是解决方案必须在顶层目录中。

您可以在解决方案旁边添加Directory.Build.targets文件,以将警告设置为错误。该文件将自动生成,并在构建过程中使用(请参阅文档中的更多内容:https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build?view=vs-2019#directorybuildprops-and-directorybuildtargets

<Project>
  <PropertyGroup>
    <WarningsAsErrors>$(WarningsAsErrors);CS0108;CS0114</WarningsAsErrors>
  </PropertyGroup>
</Project>

关于为什么默认情况下它是警告而不是错误(我的想法):错误是破坏构建的事情,您无法编译项目/解决方案,而警告是警告用户可能存在的错误。

© www.soinside.com 2019 - 2024. All rights reserved.