はじめに
現行バージョンのUnityでは、Visual Studio用のファイルとして .slnx が生成される。
CursorではMicrosoft純正 C#拡張機能 が使えないため .slnx を読み込むことができない。
この .slnx を .sln に変換することで、ソリューション読み込みエラーを回避することを検証しました。
本拡張機能を試してみたい人は 使用手順 から読むと早いです。
- 対象読者: Unity 6 プロジェクトを Cursor で開き、Microsoft 公式の C# Dev Kit を使えないため コミュニティ版 C# 拡張機能を使用している人
記載時点の検証環境(再現・比較用):
| 項目 | バージョン |
|---|---|
| Unity | 6000.4.2f1 |
| Visual Studio Editor(パッケージ) | 2.0.27 |
| Cursor |
3.4.16(Universal) |
| VS Code(Cursor の About に表示される基盤) | 1.105.1 |
| MacOS | Tahoe 26.3 (M Series) |
Microsoft純正C#拡張機能が使えなくなった
今まで古いバージョンのUnityを使っていたこともあり、Unity × Cursorでの開発に不便を感じたことはなかった。
この度、Unityを現行バージョンに一新したところ、生成されるソリューションファイルが .sln から .slnx に変わった。CursorではMicrosoft提供の拡張機能が使えないため、このままでは開発ができない状況になった。
以下の記事で、Microsoft純正C#拡張機能が使えなくなったことを知りました。
https://zenn.dev/feelingover/articles/f01a54898afc02
この対策として .slnx を .sln に変換することで、CursorでもC#補完ができることを検証しました。
なぜ slnx だけだと読めないか
.slnx は XML で書かれたソリューションファイルです。一方、コミュニティ版の C# 拡張がこちらを ソリューションとして扱う場合、内部では昔ながらの テキスト形式 .sln(先頭に決まったヘッダーがある形式)として読む流れに寄っていることが多いです。
そのせいで .slnx をそのまま渡すと、「ヘッダーが無い」「別形式のファイルだ」といった扱いになり、ログには No file format header found のようなメッセージが出て、ソリューションとして認識されませんでした。「XML の .slnx と、クラシック .sln は別物」 とだけ押さえておけば十分だと思います。
という訳で、.slnx に載っているプロジェクト一覧を欠落なく拾い、コミュニティ版C#拡張機能が読める .sln 形式に翻訳させることを考えました。
今回のゴール
今回の目標はCursor 上でC#の補完・エラー表示・定義ジャンプが再び効くようにすることです。
変換スクリプト側で意識したのは次の 2 点です。
- Unity が出した
.slnxに列挙されている.csprojを漏れなく拾う - コミュニティ版C#拡張機能がパースできる クラシックな
.slnテキストを出す(今回はFormat Version 12 系の見た目に寄せました) -
.slnxファイルが更新される度に変換スクリプトを実行する
ほかに考えたが見送ったこと
Microsoft純正の C# 拡張+C# Dev Kit をCursorで使う: そもそもMicrosoft製の拡張機能がCursorなどのVSCode派生エディターで使えなくなっているので不可能と判断。
Unity内のプラグインVisual Studio Editor パッケージを古い版に固定して .sln 生成に戻す:現行バージョンのUnityではそもそも古いバージョンが選べないので、今回の趣旨から却下。
Pythonスクリプトで変換を実行する: .slnx ファイルが高頻度で更新されるので拡張機能で定期実行した方が早いと判断。
使用手順
- 以下のサイトからVSIXファイルをダウンロード(画面下部のslnx-auto-convert-0.1.0.vsixからダウンロードできます)
Release v0.1.0
- VS Code または Cursor でコマンドパレットを開く。(⌘+⇧+P)
-
「Extensions: Install from VSIX…」(拡張機能: VSIX からインストール…)を実行。
- ダウンロードした
.vsixを選択。
実行後: コマンドパレットで 「Developer: Reload Window」(開発者: ウィンドウの再読み込み) を実行をお勧めします。 - インストール後、Unityで「Preferences > External Tools > Regenerate project Files」から
.slnxファイルを生成することでCursor上で本拡張機能が動き.sln形式に変換することができます。
- 以後、Unityで新しいスクリプトを作成するごとに生成される
.slnxファイルは、その度に.slnに変換されます。
うまくいかないときと注意点
- 変換で付ける プロジェクト GUID が
.csproj内と一致しないことがあります。厳密なソリューション同一性が必要な用途では注意してください。 -
.csprojがまだ無い状態で.slnだけ作っても、補完は戻りません。Unity のプロジェクト生成から先に確認してください。 - 本拡張機能は
.vscode内に.vstupatchdisableファイルを作成します。これはUnityがdotnet.defaultSolutionを.slnx形式に更新してしまうことを防ぎます。もし本拡張機能を削除する場合はこちらを消すことも忘れなきようお願い致します。
おわりに
この方法は 恒久対策というより橋渡しです。次のどれかが進めば、必要性は薄れていくはずです。
- 利用している C# ツールチェーンが
.slnxをネイティブに扱えるようになる - Cursor 側で 公式系の C# 拡張が現実的に使えるようになる
- そもそもUnity やパッケージ構成で古いものを使用すれば、クラシック
.slnに戻せる
もし、他に良い対応策があればコメントなどで教えてくださると幸いです💦
