Как исправить ошибку "Missing Project Reference" при компиляции плагина CounterStrikeSharp
Некоторые плагины разделены на два репозитория: сам плагин и отдельный проект типа "API" или "shared", от которого он зависит, обычно подключённый как git-подмодуль. Если вы скачиваете плагин как обычный .zip с GitHub, содержимое этого подмодуля не включено, только указатель на него. В результате сборка завершается с десятками запутанных ошибок CS0246/CS0103, "type or namespace not found", по одной на каждый класс, который предоставил бы отсутствующий проект. Настоящая причина умещается в одной строке, которую легко пропустить.
Найдите настоящую ошибку
Прокрутите вверх лога неудачной сборки, выше стены ошибок CS0246. Найдите строку вроде этой, это и есть настоящая причина, всё что ниже, следствие:
warning MSB9008: The referenced project ../ggmcAPI/ggmcAPI.csproj does not exist.
Поймите, что это значит
Файл .csproj плагина ссылается на другой проект по относительному пути, в примере выше, папка с именем ggmcAPI, расположенная на уровень выше папки самого плагина. Этой папки просто нет в вашем загруженном архиве.
Проверьте, git-подмодуль ли это
Откройте страницу плагина на GitHub и найдите папку, отображаемую с маленькой стрелкой и коротким хэшем коммита вместо обычного списка файлов, это подмодуль. Кнопка "Download ZIP" на GitHub никогда не включает содержимое подмодулей, только указатель на нужный коммит. Вам нужно отдельно открыть репозиторий этого подмодуля и скачать его самостоятельно.
Правильная глубина папки
Это шаг, который большинство людей делают неправильно с первой попытки. Относительный путь в .csproj (../ggmcAPI в нашем примере) определяется относительно папки, содержащей сам файл .csproj, а не относительно корня вашего .zip архива. Если папка вашего плагина и папка зависимости не находятся на одном уровне, один уровень выше приведёт не туда.
Частая ошибка, которой стоит избегать
Размещение папки зависимости внутри самой папки плагина кажется логичным, но это не то, что ожидает относительный путь. Такая структура завершится с той же ошибкой, что и полное отсутствие папки:
Скомпилируйте заново
Когда обе папки окажутся рядом, на правильной глубине, заархивируйте всё заново и загрузите ещё раз. Если MSB9008 исчез из лога, но ошибки всё ещё видны, теперь это настоящие ошибки компиляции, которые стоит рассмотреть отдельно.
Открыть компилятор CS2SharpБыло ли это руководство полезным?
Barlap для сообщества.