CounterStrikeSharpプラグインのコンパイル時に「Missing Project Reference」エラーを修正する方法
プラグインの中には、2つのリポジトリに分かれているものがあります。プラグイン本体と、それが依存する別の「API」または「shared」プロジェクトで、通常はgitサブモジュールとしてリンクされています。GitHubからプラグインを単純な.zipとしてダウンロードすると、そのサブモジュールの内容は含まれず、そこへのポインターのみが含まれます。結果として、ビルドは数十件の紛らわしいCS0246/CS0103エラー、「type or namespace not found」で失敗します。欠落しているプロジェクトが提供していたはずの各クラスごとに一件ずつです。本当の原因はたった一行で、見逃しやすいものです。
本当のエラーを見つける
失敗したビルドログの一番上、CS0246エラーの壁より上までスクロールしてください。このような行を探してください。これが本当の原因で、その下にあるものはすべてその結果です。
warning MSB9008: The referenced project ../ggmcAPI/ggmcAPI.csproj does not exist.
意味を理解する
プラグインの.csprojファイルは、相対パスを通じて別のプロジェクトを参照しています。上の例では、プラグイン自身のフォルダの1つ上の階層にある、ggmcAPIという名前のフォルダです。そのフォルダは単に、アップロードしたアーカイブの中に存在しません。
gitサブモジュールかどうか確認する
GitHubでプラグインのページを開き、通常のファイル一覧ではなく、小さな矢印アイコンと短いコミットハッシュで表示されているフォルダを探してください。それがサブモジュールです。GitHubの「Download ZIP」ボタンは、サブモジュールの内容を含むことは決してなく、どのコミットであるべきかを示すポインターのみが含まれます。そのサブモジュール自体のリポジトリを別途開いて、単独でダウンロードする必要があります。
正しいフォルダの深さ
これはほとんどの人が最初の試みで間違えるステップです。.csproj内の相対パス(この例では../ggmcAPI)は、.zipアーカイブのルートではなく、.csprojファイル自体を含むフォルダを基準に解決されます。プラグインのフォルダと依存関係のフォルダが同じ階層にない場合、1つ上の階層は間違った場所を指します。
避けるべきよくある間違い
依存関係のフォルダをプラグイン自身のフォルダの中に置くのは理にかなっているように見えますが、相対パスが期待しているものではありません。この構造は、フォルダがまったく存在しない場合とまったく同じように失敗します。
再コンパイルする
両方のフォルダが正しい深さで並んだら、アーカイブを再度圧縮して、もう一度アップロードしてください。ログからMSB9008が消えたのにまだエラーが表示される場合は、それは個別に調査する価値のある本物のコンパイルエラーです。
CS2Sharpコンパイラーを開くこのチュートリアルは役に立ちましたか?
Barlap コミュニティのために。