Cum repari eroarea "Missing Project Reference" la compilarea unui plugin CounterStrikeSharp
Unele plugin-uri sunt impartite in doua repo-uri: plugin-ul propriu-zis, si un proiect separat de tip "API" sau "shared" de care depinde, de obicei legat ca submodul git. Daca descarci plugin-ul ca un simplu .zip de pe GitHub, continutul acelui submodul nu e inclus, doar un pointer catre el. Rezultatul e un build care esueaza cu zeci de erori confuze CS0246/CS0103, "type or namespace not found", cate una pentru fiecare clasa pe care ar fi furnizat-o proiectul lipsa. Cauza reala e o singura linie, usor de ratat.
Gaseste eroarea reala
Deruleaza pana sus, deasupra zidului de erori CS0246. Cauta o linie ca aceasta, e cauza reala, tot ce urmeaza dupa e o consecinta:
warning MSB9008: The referenced project ../ggmcAPI/ggmcAPI.csproj does not exist.
Intelege ce inseamna
Fisierul .csproj al plugin-ului face referire la un alt proiect printr-o cale relativa, in exemplul de mai sus, un folder numit ggmcAPI, aflat cu un nivel deasupra folderului plugin-ului. Acel folder pur si simplu nu e in arhiva pe care ai incarcat-o.
Verifica daca e submodul git
Deschide pagina plugin-ului pe GitHub si cauta un folder afisat cu o mica sageata si un hash scurt de commit, in loc de o listare normala de fisiere, asta e un submodul. Butonul "Download ZIP" de pe GitHub nu include niciodata continutul submodulelor, doar un pointer catre commit-ul la care ar trebui sa fie. Trebuie sa deschizi separat repo-ul acelui submodul si sa-l descarci de sine statator.
Pune-l la adancimea corecta
Ala e pasul pe care userii il gresesc de obicei la prima incercare. Calea relativa din .csproj (../ggmcAPI in exemplul nostru) se rezolva fata de folderul care contine chiar fisierul .csproj, nu fata de radacina arhivei .zip. Daca folderul plugin-ului si folderul dependintei nu sunt "surori", un nivel mai sus ajunge in alta parte, gresita.
O greseala frecventa de evitat
Sa pui folderul dependintei chiar in interiorul folderului plugin-ului pare logic, dar nu e ce asteapta calea relativa. Structura asta va esua exact la fel ca atunci cand nu exista deloc niciun folder:
Recompileaza
Odata ce ambele foldere stau alaturi, la adancimea corecta, re-arhiveaza si incarca din nou. Daca MSB9008 nu mai apare in log dar tot vezi erori, alea sunt acum erori reale de compilare, care merita investigate separat.
Deschide Compilatorul CS2SharpA fost util acest tutorial?
Barlap pentru comunitate.