Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

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

Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
>
Свершилось! PVS-Studio поддерживает ана…

Свершилось! PVS-Studio поддерживает анализ проектов под .NET 5

21 Апр 2021

10 ноября 2020 года была выпущена новая версия .NET Core, официально названная .NET 5. Обновлённая платформа предоставляет множество различных возможностей. К примеру, она позволяет C#-разработчикам использовать нововведения C# 9: records, relational pattern matching и т. д. К сожалению, есть и минусы – корректно проанализировать такой проект с помощью PVS-Studio нельзя. Ну... Раньше было нельзя :) Ведь теперь эта проблема в прошлом – следующий релиз PVS-Studio 7.13 будет поддерживать анализ проектов, ориентированных на .NET 5!

0822_NET_5_support_ru/image1.png

Aka .NET Core 4

.NET 5 является, по сути, продолжением .NET Core 3.1. Изменив название на ".NET", сотрудники Microsoft решили подчеркнуть, что именно эта реализация теперь является основной и именно она будет далее развиваться. И ведь не обманули – на официальном сайте уже на момент написания статьи можно было найти целых 3 preview-версии .NET 6. Однако почему же версия, следующая после 3.1, стала 5? Что ж, это не кажется таким удивительным, если вспомнить, что после Windows 8.1 идёт Windows 10 :)

На самом деле, номер 4 пропущен лишь для того, чтобы не было путаницы с разделением .NET Framework и .NET. Несмотря на это, "Entity Framework Core 5.0", базирующийся на .NET 5, сохранит постфикс "Core". Это связано с тем, что в противном случае нельзя будет отличить Core и Framework версии "Entity Framework 5.0".

.NET 5 даёт разработчикам много новых возможностей. К примеру, в C# серьёзно улучшен механизм сопоставления с шаблоном. Кроме того, появилась необычная, но интересная возможность писать код вне функций и классов. Пожалуй, далеко не каждому разработчику такое нужно, но наверняка и у этой фичи найдутся свои поклонники. Полный список нововведений C# 9 можно найти на официальном сайте.

Почитать про общие нововведения .NET 5 можно здесь.

PVS-Studio и .NET 5

Пользователи нередко писали нам с просьбой поддержать анализ .NET 5 проектов. Да и сами мы вполне понимали, что крайне важно идти в ногу со временем. Однако поддержка новых версий платформы – хоть и важный, но далеко не единственный вектор развития PVS-Studio. Во многом именно поэтому пришлось так долго ждать :( Но сейчас мы, наконец-то, готовы представить вам новую версию, поддерживающую анализ проектов под .NET 5.

Новые возможности будут доступны для версий анализатора под Windows, Linux и macOS. Версии под Windows для работы, как и раньше, требуется установленный .NET Framework 4.7.2. А вот для использования анализатора под Linux и macOS теперь требуется наличие .NET 5 (раньше был нужен .NET Core 3.1).

Зачем анализатор под Linux и macOS перешёл на .NET 5?

Вообще изначально мы не планировали переводить анализатор для Linux/macOS с .NET Core 3.1 на .NET 5. Нет, конечно же, мы собирались перейти на новую версию платформы, но думали сделать это несколько позже. Что ж, планы пришлось поменять, так как перед нами возникла проблема.

При проведении анализа проектов, ориентированных под .NET Core (и, соответственно, .NET 5), PVS-Studio активно взаимодействует с SDK соответствующей версии. Сложности возникли из-за того, что библиотеки из .NET 5 SDK зависят от "System.Runtime" версии 5. В то же время анализатор, ориентированный на .NET Core 3.1, загружает в память "System.Runtime" версии 3.1. В результате возникал конфликт – анализатор не мог взаимодействовать с библиотекой из SDK и анализ не проходил.

Переход с .NET Core на .NET 5 полностью решил данную проблему :).

Мгновенные улучшения

Для реализации поддержки анализа проектов под .NET 5 нам понадобилось обновить некоторые зависимости. В частности, PVS-Studio теперь использует более новые версии Roslyn и MSBuild. Это позволяет анализатору корректно разбирать код, использующий возможности C# 9. К примеру, ранее анализатор мог выдавать ложные срабатывания на код вида

user = user with { Name = "Bill" }

Анализатор не мог корректно обработать такой код, так как в него не была заложена информация о WithExpression. В результате выдавалось предупреждение о том, что переменная user присваивается сама себе. Конечно, в том же самом отчёте было и предупреждение о том, что анализ данного проекта не поддерживается. Однако от того не особо легче :(. К счастью, после обновления все подобные проблемы решились сами собой. Другие же моменты нам пришлось обдумывать отдельно.

Проблемы новых версий

Развивающийся статический анализатор вынужден подстраиваться под новые версии языка. Очевидно, что при разработке такого инструмента невозможно учесть всех особенностей, которые появятся в языке в будущем. Поддержка анализа новой версии языка – это не только обеспечение корректного парсинга и построения семантики. Не менее важно провести обзор существующего кода, оценить работу различных внутренних технологий и диагностических правил. Скорее всего, после обновления появится необходимость внести в существующий функционал некоторые правки.

Одно из потенциально проблемных нововведений я упоминал ранее – top-level statements. При работе над C#-анализатором мы в некоторых случаях рассчитывали, что объявления локальных переменных, условия, циклы и т. д. всегда будут находиться внутри методов. Появление в языке возможности написания C#-кода даже без объявления класса... Это нечто интересное, конечно, но для нас это порождает некоторые сложности. Впрочем, едва ли все разработчики вдруг начнут писать весь код вне классов :)

Другое нововведение, заставившее нас изменить код, – init-аксессор. Его появление повлекло за собой необходимость доработки диагностического правила V3140.

Правило срабатывает в случаях, когда в аксессорах свойства используются разные внутренние переменные. Ниже приведён пример срабатывания из статьи о проверке RunUO:

private bool m_IsRewardItem;

[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
  get{ return m_IsRewardItem; }
  set{ m_IsRewardItem = value; InvalidateProperties(); }
}

private bool m_East;

[CommandProperty( AccessLevel.GameMaster )]
public bool East                                       // <=
{
  get{ return m_East; }
  set{ m_IsRewardItem = value; InvalidateProperties(); } 
}

Предупреждение PVS-Studio: V3140 Property accessors use different backing fields. WallBanner.cs 77

При написании диагностики V3140 предполагалось, что у свойства может быть только 2 аксессора – get и set. Появление init застало существующую реализацию врасплох. Диагностика не просто некорректно работала – она падала с исключением! К счастью, эта проблема была обнаружена ещё на этапе тестирования и успешно решена.

0822_NET_5_support_ru/image2.png

Ждём релиза?

А это вовсе не обязательно! Конечно, релиз уже скоро, поэтому ждать осталось недолго, но всё-таки... Хочется попробовать новую версию как можно раньше, не правда ли? Что ж, никаких проблем – мы с радостью предоставим такую возможность! Переходите на страницу обратной связи и отправляйте свой запрос новой версии. Мы постараемся ответить максимально быстро, а значит, уже скоро вы сможете анализировать свои (и не только) .NET 5 проекты!

Призываем вас также делиться своими впечатлениями о PVS-Studio. Каким бы ни был ваш опыт использования анализатора, мы хотели бы о нём узнать. Ведь во многом именно благодаря отзывам пользователей PVS-Studio развивается и становится лучше.

Популярные статьи по теме
Эффект последней строки

Дата: 31 Май 2014

Автор: Андрей Карпов

Я изучил множество ошибок, возникающих в результате копирования кода. И утверждаю, что чаще всего ошибки допускают в последнем фрагменте однотипного кода. Ранее я не встречал в книгах описания этого …
Зло живёт в функциях сравнения

Дата: 19 Май 2017

Автор: Андрей Карпов

Возможно, читатели помнят мою статью под названием "Эффект последней строки". В ней идёт речь о замеченной мной закономерности: ошибка чаще всего допускается в последней строке однотипных блоков текс…
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей

Дата: 21 Ноя 2018

Автор: Андрей Карпов

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

Дата: 22 Дек 2018

Автор: Андрей Карпов

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возмо…
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31 Июл 2017

Автор: Андрей Карпов

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…
PVS-Studio ROI

Дата: 30 Янв 2019

Автор: Андрей Карпов

Время от времени нам задают вопрос, какую пользу в денежном эквиваленте получит компания от использования анализатора PVS-Studio. Мы решили оформить ответ в виде статьи и привести таблицы, которые по…
Как PVS-Studio оказался внимательнее, чем три с половиной программиста

Дата: 22 Окт 2018

Автор: Андрей Карпов

PVS-Studio, как и другие статические анализаторы кода, часто выдаёт ложные срабатывания. Но не стоит спешить считать странные срабатывания ложными. Это короткая история о том, как PVS-Studio вновь ок…
Любите статический анализ кода!

Дата: 16 Окт 2017

Автор: Андрей Карпов

Я в шоке от возможностей статического анализа кода, хотя сам участвую в разработке инструмента PVS-Studio. На днях я был искренне удивлён тому, что анализатор оказался умнее и внимательнее меня.
Как и почему статические анализаторы борются с ложными срабатываниями

Дата: 20 Мар 2017

Автор: Андрей Карпов

В своей предыдущей статье я писал, что мне не нравится подход, при котором статические анализаторы кода оцениваются с помощью синтетических тестов. В статье приводился пример, воспринимаемый анализат…
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

Автор: Андрей Карпов

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…

Комментарии (0)

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