LoginSignup
8
3

More than 1 year has passed since last update.

【Unity】Asmdefに参照を追加してもVSCode側で反映されない

Last updated at Posted at 2020-10-16

TL;DR;

UPMでVisualStudioCodeEditorの代わりにこちらを使ってください。
git@github.com:wallstudio/com.unity.ide.vscode.git

最新のバージョンでは修正されています。

原因っぽいもの

CsProjファイルのReferenceOutputAssemblyの項目がfalseになっているからの様で、これを手動でtrueにすると治る。
ただ、これは自動生成ファイルなので、手直しでOKとはいきません。
もう治ってるみたいなことがかいてあったのですが…

とりあえず、当時の対処療法を試みるも、UPMのCode拡張を入れていると、AssetPostprocessor.OnGeneratedCSProjectが呼ばれなくなってしまうらしいです。

public class FIX : AssetPostprocessor
{
  private static string OnGeneratedCSProject(string path, string content)
    => content.Replace(
      "<ReferenceOutputAssembly>false</ReferenceOutputAssembly>",
      "<ReferenceOutputAssembly>true</ReferenceOutputAssembly>");
  }
}

対処

com.unity.ide.vscodeを直接書き換えちゃうのが手っ取り早いということで、こちらです

追記

OmniSharpの方にIssueが上がっていました

ReferenceOutputAssemblyという名前的に本来trueであるべきのような気もするのですが(com.unity.ide.vscide側が悪い)どうなのでしょうか。
今まではfalseで動いていましたが。

Unityがプロジェクトメタファイルの出力クラスを切り替えている部分が分かりました。
AssetPostprocessor.cs#L159
どうやら、これからはOnGeneratedCSProjectではなく、IExternalCodeEditorを使って出力機構丸ごと差し替える形でフックするのがよさそうです。
また、力業ではありますが、ReadDirectoryChangesW(Win32API)などで、ファイルの書き換えをフックするという手段もあるにはあります。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3