Como corrigir erros "Missing Project Reference" ao compilar um plugin CounterStrikeSharp
Alguns plugins estão divididos em dois repositórios: o plugin em si, e um projeto separado do tipo "API" ou "shared" do qual depende, normalmente ligado como submódulo git. Se descarregar o plugin como um simples .zip do GitHub, o conteúdo desse submódulo não está incluído, apenas um ponteiro para ele. O resultado é uma compilação que falha com dezenas de erros confusos CS0246/CS0103, "type or namespace not found", um para cada classe que o projeto em falta teria fornecido. A causa real está numa única linha, fácil de não notar.
Encontre o erro real
Percorra até ao topo do registo de compilação falhada, acima da parede de erros CS0246. Procure uma linha como esta, é a causa real, tudo o que se segue é consequência dela:
warning MSB9008: The referenced project ../ggmcAPI/ggmcAPI.csproj does not exist.
Perceba o que significa
O ficheiro .csproj do plugin faz referência a outro projeto através de um caminho relativo, no exemplo acima, uma pasta chamada ggmcAPI, um nível acima da própria pasta do plugin. Essa pasta simplesmente não está no seu arquivo carregado.
Verifique se é um submódulo git
Abra a página do plugin no GitHub e procure uma pasta mostrada com um pequeno ícone de seta e um hash de commit curto, em vez de uma listagem de ficheiros normal, isso é um submódulo. O botão "Download ZIP" do GitHub nunca inclui o conteúdo dos submódulos, apenas um ponteiro para o commit que deveria ser. Terá de abrir separadamente o repositório desse submódulo e descarregá-lo por conta própria.
A profundidade correta da pasta
Este é o passo que a maioria costuma errar à primeira tentativa. O caminho relativo no .csproj (../ggmcAPI no nosso exemplo) é resolvido em relação à pasta que contém o próprio ficheiro .csproj, não em relação à raiz do seu arquivo .zip. Se a pasta do seu plugin e a pasta da dependência não forem irmãs, um nível acima leva ao local errado.
Um erro comum a evitar
Colocar a pasta da dependência dentro da própria pasta do plugin parece razoável, mas não é o que o caminho relativo espera. Esta estrutura falhará exatamente como se não existisse pasta nenhuma:
Recompile
Depois de as duas pastas ficarem lado a lado na profundidade correta, volte a compactar o arquivo e carregue-o novamente. Se o MSB9008 tiver desaparecido do registo mas ainda vir erros, esses são agora erros de compilação reais que vale a pena investigar em separado.
Abrir o compilador CS2SharpEste tutorial foi útil?
Barlap para a comunidade.