【Unity】프로젝트의 루트의 네임스페이스를 지정한다【Rider】

2209 단어 Unity

소개



Rider의 표준 기능으로 루트의 네임 스페이스를 지정했을 때 설정이 초기화되는 문제가 발생했습니다. 이번은 그 대처 방법에 대해 소개합니다.

아마 다른 에디터에서도 공통되는 이야기인 것입니다만, 이번은 Rider를 사용하고 있는 전제로 이야기합니다.

환경


  • macOS 11.4 (20F71)
  • Unity 2020.3.11f1
  • JetBrains Rider Editor 3.0.7

  • JetBrains Rider 2021.1.5

  • 배경(발생한 문제에 대해)



    Rider의 코드 검사에는 디렉토리 구조와 네임스페이스의 불일치를 감지하는 기능이 있습니다.


    유용한 기능이지만 디렉토리 구조와 네임 스페이스는 반드시 일치하지는 않습니다. 플랫폼 고유의 디렉토리를 생략하고 싶은 사정이나 C#의 가이드라인에 따른 아래와 같은 네임스페이스로 하고 싶은 경우가 있습니다.
    <Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]
    

    그래서 Rider에는 다음과 같이 네임스페이스를 조정하는 기능이 있습니다만, 전자에 관해서는 왠지 컴파일의 타이밍 등으로 설정이 초기화되어 버리는 문제가 있었습니다.
  • 루트의 네임 스페이스 지정
  • 네임 스페이스 요소가 아닌 디렉토리를 지정합니다.


    해결 방법



    해당 프로젝트의 Assembly Definition Asset(asmdef 파일)의 「Root Namespace」로 지정하면 OK입니다.



    Assembly Definition Asset에 대해서는 스스로 조사해 주세요. 설정되지 않은 프로젝트 (csproj)에 관해서는 역시 컴파일마다 재설정되어 버리는 것 같습니다.

    원인입니다만, Unity 매뉴얼을 보면 대상이 되는 csproj는 Unity측에서 제어하고 있는 것 같은 설명이 있습니다. 아마도 이 근처의 메커니즘이 원인일까요?

    Unity는 자동으로 Visual Studio .sln 및 .csproj 파일을 만들고 유지합니다. 누가 Unity 내에서 파일을 추가, 이름 바꾸기, 이동 또는 삭제하더라도 Unity는 .sln 및 .csproj 파일을 생성합니다. Visual Studio의 솔루션에도 파일을 추가할 수 있습니다. Unity는 이러한 새 파일을 가져온 다음 Unity가 프로젝트 파일을 다시 만들면 이 새 파일을 포함하여 프로젝트 파일을 만듭니다.


    마지막으로



    (Rider는 Unity를 전제로 한 IDE인데, 왜 이 거동에 대해서 쓰지 않았을까・・・?)

    Twitter하고 있으므로 팔로우 해 주시면 기쁩니다!

    추가



    Unity 2020.2의 새로운 기능에 쓰여 있다는 것을 가르쳐 주셨습니다!

    어셈블리 정의 설정에서 루트 네임스페이스 사용 가능
    C# 의 네임스페이스는 코드를 정리하는 효율적인 방법을 제공해, 클래스의 명명에 관해서 다른 패키지나 라이브러리와의 충돌을 회피할 수 있습니다. 루트 네임스페이스를 asmdef 검사기의 새 필드로 사용할 수 있으며 Unity 및 Visual Studio 및 Rider에서 새 스크립트를 만들 때 네임스페이스를 자동으로 추가하는 데 사용됩니다.
  • 좋은 웹페이지 즐겨찾기