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

Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
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.webp

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.webp

Ждём релиза?

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

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

Популярные статьи по теме
Планируете взяться за .NET MAUI? Будьте готовы к приключениям с NullReferenceException

Дата: 06 Окт 2022

Автор: Никита Липилин

.NET Multi-platform App UI – фреймворк, который пишут профессионалы. Тем не менее, код некоторых его функций выглядит так, будто разработчики забыли о последствиях разыменования нулевых ссылок.
Особенности реализации List в C#

Дата: 04 Окт 2022

Автор: Артём Ровенский

List является одной из самых популярных коллекций в C#. Давайте разберёмся в некоторых особенностях работы с ним и посмотрим на внутреннюю реализацию его отдельных частей.
Разбор ошибок в игровом движке Stride

Дата: 30 Сен 2022

Автор: Андрей Москалёв

Stride – это мощный, бесплатный и активно развивающийся игровой движок, реализованный на C#. Он вполне может стать альтернативой Unity, но насколько качественный исходный код Stride? Узнаем это с пом…
Сортировки в C#: OrderBy.OrderBy или OrderBy.ThenBy? Разбираемся, что эффективнее и почему

Дата: 20 Сен 2022

Автор: Сергей Васильев

Предположим, есть задача: нужно отсортировать коллекцию по нескольким ключам. В C# это можно сделать с помощью вызовов OrderBy().OrderBy() или OrderBy().ThenBy(). Но в чём разница между этими вызовам…
ML.NET: можно ли доверять машинному обучению Microsoft?

Дата: 08 Сен 2022

Автор: Андрей Москалёв

В 2018 году Microsoft разработали ML.NET – фреймворк машинного обучения для .NET разработчиков. За прошедшее время эта библиотека претерпела существенные изменения и обзавелась новыми функциями для в…

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

Следующие комментарии
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно. Хотите узнать подробнее?
Принять