Почему по умолчанию предупреждения CS0108 и CS0114 * НЕ * имеют ошибки в Visual Studio? - PullRequest
0 голосов
/ 27 октября 2019

Предупреждение CS0108 срабатывает, когда переменная объявлена ​​с тем же именем, что и переменная в базовом классе.
Предупреждение CS0114 является эквивалентом для методов.

Оба помечаются как предупреждение, но не как ошибка,Компиляция продолжается, и исполняемый файл может быть запущен.

Но существует риск логической ошибки или ошибки, когда вызывается неправильная ошибка.

Это чрезвычайно опасно в реальных производственных средах.

Это также очень "неочевидно" при отладке: код выглядит так, как будто он делает правильные вещи, когда проходит, но это не так. Ошибка может длиться вечно, чтобы идентифицировать в сильно абстрагированных / унаследованных кодовых базах.

Конечно, ключевое слово «new» существует по причине, и (еще более точно) использование должно быть вызвано ошибкой компиляции -не просто предупреждение.

Но это не так. Вы должны настроить его вручную для каждого проекта в решении;даже невозможно обеспечить применение решения в целом.

И я пока не нашел способа сделать это поведением по умолчанию для новых решений.

Почему?

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Visual Studio по умолчанию считает ошибкой все, что не позволяет программе скомпилироваться. Поскольку эти соображения влияют не на компиляцию, а только на качество кода, они считаются предупреждениями. Но, как указал Styxxy, вы можете рассматривать любое предупреждение как ошибку.

1 голос
/ 30 октября 2019

На самом деле вы можете установить предупреждения, чтобы быть ошибки решения в целом (вид). Единственное ограничение заключается в том, что решение должно находиться в каталоге верхнего уровня.

Вы можете добавить файл 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>

. Почему по умолчанию это предупреждение, а не ошибка (мои мысли): ошибкиэто вещи, которые нарушают сборку, и вы не можете скомпилировать проект / решение, в то время как предупреждения должны предупредить пользователя о потенциальной ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...