Как да поправите грешка "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 и потърсете папка, показана с малка стрелка и кратък хеш на commit, вместо нормален списък с файлове, това е подмодул. Бутонът "Download ZIP" на GitHub никога не включва съдържанието на подмодулите, само указател за това кой commit трябва да бъде. Ще трябва да отворите отделно репозиторито на този подмодул и да го изтеглите самостоятелно.
Правилната дълбочина на папката
Това е стъпката, която повечето хора обикновено бъркат при първия опит. Относителният път в .csproj (../ggmcAPI в нашия пример) се определя спрямо папката, съдържаща самия файл .csproj, а не спрямо корена на вашия .zip архив. Ако папката на плъгина ви и папката на зависимостта не са на едно ниво, едно ниво нагоре води на грешното място.
Честа грешка, която да избягвате
Поставянето на папката на зависимостта вътре в самата папка на плъгина изглежда логично, но не е това, което очаква относителният път. Тази структура ще се провали точно както при пълна липса на папка:
Компилирайте отново
След като двете папки застанат една до друга на правилната дълбочина, архивирайте отново и качете файла пак. Ако MSB9008 е изчезнал от лога, но все още виждате грешки, те вече са истински грешки при компилация, които си струва да разгледате отделно.
Отворете компилатора CS2SharpБеше ли полезно това ръководство?
Barlap за общността.