[vscode/Unity] 모노를 모르고, 지식감이 사라질 때 대처하는 방법

이 문장의 주의사항


대응법이 있지만 근본적인 해결은 아니고 단순한 회피책일 뿐이다.
대강 해결되었다.
과정은 상관없어!이런 사람은 보도의 마지막에만 문제가 없다.

컨디션


OS: macOS 12.0.1 (21A559)
vscode: 1.63.1
dotnet: 5.0.404
mono: 6.12.0.162
Unity: 2020.3.24f1
Visual Studio Code Editor: Version 1.2.4 - September 01, 2021

원인을 따지기까지의 일련의 절차


현상.


vode에 유닛 스크립트를 쓰면 지식감이 자주 사라진다.
지식이 없으면 Unity Engine 같은 것은 처리하기 어렵다.
모노 같은 거.NET, omnisharp, 각종 오류 토해.
조사할 때 같은 현상이 많이 일어나는 것 같았고 다양한 대처법이 적혀 있었지만 결국 명확한 해결책을 찾지 못했다.
(예를 들어 재부팅이나 재설치를 하면 치료가 되지만 결과는 재발한다.)
오늘은 그 이유를 따지기 위해 특공을 펼쳤다.

오류 확인


지능 핵인omnisharp가 오류를 토해냈다.
Starting OmniSharp server at 12/16/2021, 1:52:22 PM
    Target: /Users/username/Unity/Projects/projectname/projectname.sln

[ERROR] Error: Unable to find Mono. Ensure that Mono's '/bin' folder is
added to your environment's PATH variable.
omnisharp에서mono를 찾을 수 없을 것 같습니다.
bin 파일 path를 추가한다고...

path 내용 확인


❯ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Apple/usr/bin:
/Library/Frameworks/Mono.framework/Versions/Current/Commands
뒤에
/Library/Apple/usr/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands
mono의 path일 것입니다. 하지만 신중하게 보기 위해서는 bin 파일의 소재를 찾아야 합니다.
이것은 모노의 지령용 path인 것 같습니다.
그래서 이건 모노 호스트랑 상관없어.

들키다


❯ which mono
/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono

~/Unity/Projects/projectname
❯ ls -la /Library/Frameworks/Mono.framework/Versions/Current/
total 24
drwxr-xr-x   14 root  admin   448 Dec 15 12:06 .
drwxr-xr-x    4 root  admin   128 Dec 15 12:06 ..
drwxr-xr-x  123 root  admin  3936 Dec 15 12:06 Commands
-rw-r--r--    1 root  admin    11 Dec  1 00:52 VERSION
drwxr-xr-x  293 root  admin  9376 Dec 15 12:06 bin
drwxr-xr-x    6 root  admin   192 Dec 15 12:06 etc
-rw-r--r--    1 root  admin     0 Dec 15 12:06 gtk-query-immodules-2.0.log
drwxr-xr-x   41 root  admin  1312 Dec 15 12:06 include
drwxr-xr-x  217 root  admin  6944 Dec 15 12:06 lib
-rw-r--r--    1 root  admin     0 Dec 15 12:06 postinstall-fc-cache.log
-rw-r--r--    1 root  admin   319 Dec 15 12:06 postinstall-gdk-pixbuf-query-loaders.log
-rw-r--r--    1 root  admin     0 Dec 15 12:06 postinstall-pango-querymodules.log
drwxr-xr-x   16 root  admin   512 Dec  1 00:52 share
-rw-r--r--    1 root  admin    47 Dec  1 00:52 updateinfo
다섯 번째 줄에 bin 파일이 있기 때문에 path를 추가합니다.이렇게 해결?
❯ export PATH=/Library/Frameworks/Mono.framework/Versions/Current/:$PATH 

그렇지만 안 돼요.


omnisharp를 다시 시작해도 path를 통과할 수 없습니다.수수께끼야.

vscode 설정 확인


Omnisharp: Use Global Mono
Launch OmniSharp with the globally-installed Mono. If set to "always", "mono"version 6.4.0 or greater must be available on the PATH. If set to "auto", OmniSharp will be launched with "mono"if version 6.4.0 or greater is available on the PATH.
글로벌 모노를 쓰고 싶다면 ver6.4.0 이상의mono path가 유효하다고 합니다.
거기서 Mono 버전을 확인합니다.
Mono JIT compiler version 6.12.0.162
...😠

내장된mono 사용하기


조사에 따르면omnisharp 자체에mono가 내장되어 있으며, 통상적으로mono를 사용한다.저기 있다
"omnisharp.useGlobalMono": "never"
내장mono를 사용할 때...
OmniSharp.MSBuild.ProjectManager
        Attempted to update project that is not loaded

This project targets .NET version that requires reference assemblies that 
do not ship with OmniSharp out of the box (e.g. .NET Framework). The most 
common solution is to make sure Mono is installed on your machine 
(https://mono-project.com/download/) and that OmniSharp is started with 
that Mono installation (e.g. "omnisharp.useGlobalMono":"always" in C# 
Extension for VS Code).
끊임없이 오류가 발생했습니다.
어쨌든 모노를 설치한 느낌.돈을 벌다.

죽어가다


왔다 갔다 꽉 찼다.😇

회피 전략(원리 불분명)


위에서 찾은 path 등을 추가할 필요가 없다.
최신 mono 설치
"omnisharp.useGlobalMono": "always"
의 상태에서 다음 절차를 따라 path가 통과됩니다.
  • 먼저 Unity를 엽니다.
  • 적당한 스크립트에서 vscode
  • 열기
  • 이때mono가 인식되지 않지만 cmd+Q로 vscode
  • 종료
  • 스크립트를 다시 적당한 방식으로 엽니다.
  • path를 통해 지식인 기질을 회복한다.
  • 3. 정시 cmd+shift+W가 꺼지면 path가 통과하지 않습니다.요컨대×버튼으로 vscode 창을 닫아도 의미가 없습니다.)
    vscode 명령으로omnisharp와 window를 다시 시작하면 path도 통과하지 않습니다.찾기만 하면 cmd+Q로 path를 통과할 수 있습니다.
    한마디로 지식인이 일하지 않으면 cmd+Q로 부활한다.
    나는'잘못을 토해서 지식인은 효과가 없다고 느꼈지만 어느새 좋아졌다'는 현상을 여러 번 겪었다.'언제 다 나았는가'는 바로'어느새 vscode가 끝났다'는 것이다.

    해결책 발견(수수께끼도 있지만...)


    "omnisharp.useGlobalMono": "always",
    "omnisharp.monoPath":"/Library/Frameworks/Mono.framework/Versions/Current"
    
    settings.이렇게 json에서 지정한/현재 path는 지식감을 회복할 수 있습니다.
    이 path는terminal에서setting을 통과하지 못하는 이유를 모르겠다.json을 기입해야 합니다.
    그렇지만
    [fail]: OmniSharp.MSBuild.ProjectLoadListener
    Unexpected exception got thrown from project load listener:
    System.NullReferenceException:
    Object reference not set to an instance of an object
    
    처럼 수수께끼 같은 Null Referenception이 대량으로 나오기 때문에 문제가 없는지 모르겠다.
    하지만 지식인의 느낌을 어떻게든 쓸 수 있다.

    말하자면 왜 path가 안 통과했냐면요.


    몰라요.
    말하자면 회피책이 통과될 수 있는 이유도 수수께끼다.

    좋은 웹페이지 즐겨찾기