Пока PVS-Studio анализирует проект Unity, можно наткнуться на такую ​​ошибку: Произошла ошибка при попытке открыть файл решения «…»: В файле решения есть два проекта с именами «UnityEngine.UI». В этой заметке обсуждаются причины этой ошибки и способы ее устранения.

Причины

PVS-Studio использует некоторые сторонние библиотеки, включая Roslyn и MSBuild, для проверки C#-проектов. Мы используем Roslyn для разбора кода. MSBuild анализирует файлы решения (.sln) и проекта (.csproj). Кроме того, MSBuild является основной системой сборки .NET.

Вы можете столкнуться с указанной выше ошибкой при вызове метода Microsoft.Build.Construction.SoltuionFile.Parse для получения экземпляра SolutionFile. Метод находится во внешней библиотеке для анализатора (Microsoft.Build.dll), поэтому напрямую изменить его поведение мы не можем.

Если вы внимательно посмотрите на текстовое представление файла .sln, то сможете заметить в нем дубликаты. Пример: (ID типов проектов короче, чтобы сделать пример более компактным).

Обратите внимание, что этот файл .sln дублирует имена проектов: UnityEngine.UI и Assembly-CSharp. Каждый экземпляр соответствует уникальному файлу проекта. Например, это UnityEngine.UI.csproj и UnityEngine.UI.Player.csproj для UntiyEngine.UI.

Если вы попытаетесь собрать это решение с помощью MSBuild, вы увидите уже знакомую ошибку: Ошибка файла решения MSB5004: В файле решения есть два проекта с именами «UnityEngine.UI».

Интересно, что Visual Studio и JetBrains Rider, в отличие от MSBuild, умеют собирать такие проекты. Судя по всему, они используют другой механизм сборки (возможно, сами разбирают файл .sln).

Возможные решения

Возможным решением является изменение настроек проекта. Редактор Unity создает файл .sln с дубликатами, если включена опция «Проекты проигрывателя». Отключите его в том же редакторе Unity: Правка -> Настройки -> Проекты проигрывателя.

После этого вам может понадобиться перегенерировать файлы проекта. Для этого как раз подходит кнопка «Регенерировать файлы проекта» ниже.

Тогда дубликаты из файла .sln должны исчезнуть, и анализ должен работать нормально.

Если этот способ не помогает или не подходит вам, пожалуйста, напишите нам.

Вывод

Мы стремимся улучшить анализ проектов Unity. Если у вас возникнут какие-либо проблемы или есть какие-либо пожелания, пожалуйста, не стесняйтесь написать нам.