Документация по свойству проекта C#: `‹Features›strict‹/Features›`

Я хочу разрабатывать C# с включенными всеми возможными предупреждениями от Microsoft, и я нашел этот ответ< /a> в котором сказано добавить <Features>strict</Features> в мой файл .csproj.

Однако, прежде чем я начну его использовать, я хочу прочитать о том, какие предупреждения он включает и о других побочных эффектах, которые он может иметь.

К сожалению, я не могу найти никакой документации на него вообще.

Я предполагаю, что это где-то в документации Microsoft, но я нигде не могу найти.

ОБНОВЛЕНИЕ: я нашел статья об этом ресурсе со следующей цитатой:

Обратите внимание, что этот флаг не задокументирован и малоизвестен.

Неужели Microsoft никогда не документировала эту функцию с самого начала?


person Floating Sunfish    schedule 14.06.2021    source источник
comment
Это не документация Microsoft, но она может помочь meziantou.net/csharp-compiler-strict -mode.htm   -  person Tony Stark    schedule 14.06.2021
comment
@TonyStark Ах, да. Я только что добавил обновление об этом в ОП несколько секунд назад. Извините, он не обновился для вас, прежде чем опубликовать это. Спасибо, что поделился!   -  person Floating Sunfish    schedule 14.06.2021
comment
Официальные уровни ошибок и предупреждений компилятора C# с 1 по 5   -  person Olivier Rogier    schedule 14.06.2021
comment
Всем спасибо за ссылки. Итак, в дополнение к <Features>strict</Features> я должен также добавить <WarningLevel>9999</WarningLevel> в свой файл .csproj, верно? Вероятно, это должно включить все предупреждения для моего проекта.   -  person Floating Sunfish    schedule 14.06.2021
comment
@Jimi Хотите отправить это как ответ, чтобы я мог его принять? Теперь я добавлю <WarningLevel>9999</WarningLevel> в свой файл .csproj в дополнение к <Features>strict</Features>, чтобы включить все возможные предупреждения. Поскольку для последнего свойства нет никакой документации, я думаю, что должен согласиться с этим. Если нет лучшего способа включить все предупреждения в C#.   -  person Floating Sunfish    schedule 14.06.2021
comment
Если вы используете новый компилятор, установите <WarningLevel> (на самом деле вы не можете использовать этот уровень в старых компиляторах: Ошибка компилятора CS1900), иначе <Features>strict</Features>. Если вам это действительно нужно. -- Вероятно, будет интереснее, если вы опубликуете ответ самостоятельно, чтобы вы могли объяснить, почему вы почувствовали необходимость включить эту функцию, какие проблемы она пытается решить и какой проект (версия компилятора, версия .Net) будет используй это.   -  person Jimi    schedule 14.06.2021
comment
Следует отметить, что функция strict используется анализаторами кода/профилировщиками для выдачи предупреждений, которые затем фильтруются расширением. Вы можете получать предупреждения, которые уведомляют о несуществующих проблемах, и вы не можете избавиться от них.   -  person Jimi    schedule 14.06.2021
comment
@Jimi Хорошо, я сам опубликую ответ, как только все закончу. Спасибо!   -  person Floating Sunfish    schedule 14.06.2021


Ответы (1)


Спасибо всем, кто помог, разместив ссылки на полезные статьи и документацию.

На данный момент я решил создать файл с именем Directory.Build.props со следующим содержимым:

<Project>
  <PropertyGroup>
    <Features>strict</Features>
    <WarningLevel>9999</WarningLevel>
  </PropertyGroup>
</Project>

ПРИМЕЧАНИЕ. Для .NET Core максимальное значение WarningLevel составляет 4. Для .NET 5 и новее максимальное значение составляет 9999.

Затем я скопирую и вставлю этот файл в корневой каталог всех моих файлов решений.

Моя цель состояла в том, чтобы иметь простой способ включить все предупреждения C# для любого проекта, чтобы я мог кодировать с уверенностью, что я не делаю ничего, что я не должен делать.

Хотя большую часть своей уверенности я получаю от тестов, каждый язык имеет свои собственные соглашения и лучшие практики, которые обычно генерируют предупреждения, если они не соблюдаются, что и послужило моей мотивацией для включения этих функций.

Этот подход должен работать как с Visual Studio Code, так и с Visual Studio, и хотя я использую последнюю версию .NET SDK в своей среде, он должен работать для всех современных сред C# и любой IDE.

person Floating Sunfish    schedule 14.06.2021