﻿# Анализ Unity проектов: The solution file has two projects named "UnityEngine\.UI"

При анализе Unity проекта с помощью PVS\-Studio может возникнуть ошибка следующего вида: Error was encountered while trying to open solution file '\.\.\.': The solution file has two projects named "UnityEngine\.UI"\. В данной заметке рассматриваются причины возникновения этой ошибки и способы решения\.

## Причины

Для проверки C\# проектов анализатор PVS\-Studio использует ряд сторонних библиотек, в том числе Roslyn и MSBuild\. Roslyn используется для разбора кода, MSBuild \- для разбора solution \(\.sln\) и проектных \(\.csproj\) файлов\. MSBuild, кстати, \- это основная сборочная система \.NET\.

Данная ошибка возникает при попытке получения экземпляра типа _SolutionFile_ при вызове метода _Microsoft\.Build\.Construction\.SoltuionFile\.Parse_\. Данный метод находится во внешней для анализатора библиотеке \(Microsoft\.Build\.dll\), поэтому непосредственно его поведение поменять мы не можем\.

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

![0834_UnityProjectsDuplicates_ru/image1.png](https://import.viva64.com/docx/blog/0834_UnityProjectsDuplicates_ru/image1.png)

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

Если попробовать собрать этот solution через MSBuild, то вы увидите уже знакомую ошибку: Solution file error MSB5004: The solution file has two projects named "UnityEngine\.UI"\.

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

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

Возможным вариантом решения является изменение настроек проекта\. Редактор Unity генерирует \.sln файл с дубликатами, если включена опция "Player projects"\. Отключить её можно в том же редакторе Unity: Edit \-\> Preferences \-\> Player projects\.

![0834_UnityProjectsDuplicates_ru/image2.png](https://import.viva64.com/docx/blog/0834_UnityProjectsDuplicates_ru/image2.png)

После этого может понадобиться заново сгенерировать проектные файлы\. Для этого есть кнопка ниже \- "Regenerate project files"\.

После этого дубликаты из \.sln\-файла должны пропасть, и анализ должен работать нормально\.

Если этот способ вам не помог или не подходит, пожалуйста, [напишите нам](https://pvs-studio.ru/ru/about-feedback/)\.

## Заключение

Мы стремимся к улучшению анализу Unity проектов\. Если вы столкнулись с какими\-то проблемами или у вас есть пожелания, пожалуйста, не стесняйтесь [писать нам](https://pvs-studio.ru/ru/about-feedback/)\.