Unity 프로젝트의 Roslyn 분석기와 규칙 집합 파일을 사용하여 코드의 스타일, 품질, 기타 문제를 검사할 수 있습니다.
기존의 분석기 라이브러리를 사용하여 코드를 검사하고, 직접 분석기를 작성하여 조직 내에 베스트 프랙티스나 규칙을 홍보할 수 있습니다. 이 페이지는 빈 Unity 프로젝트에서 Roslyn 분석기를 사용하는 방법을 설명합니다.
기존의 Roslyn 분석기 라이브러리를 사용하려면 프로젝트 내에 NuGet의 ErrorProne.NET.CoreAnalyzers 라이브러리를 설치한 다음, .csproj
파일을 엽니다. 프로젝트에 다음 3개의 .dll 파일이 분석기로 포함되어 있습니다.
<ItemGroup>
<Analyzer Include="packages\ErrorProne.NET.CoreAnalyzers.0.1.2\analyzers\dotnet\cs\ErrorProne.NET.Core.dll" />
<Analyzer Include="packages\ErrorProne.NET.CoreAnalyzers.0.1.2\analyzers\dotnet\cs\ErrorProne.Net.CoreAnalyzers.dll" />
<Analyzer Include="packages\ErrorProne.NET.CoreAnalyzers.0.1.2\analyzers\dotnet\cs\RuntimeContracts.dll" />
</ItemGroup>
세 .dll 파일을 Unity 프로젝트의 Assets
폴더나 Assets
폴더에 포함된 폴더로 이동합니다. 에디터에서 .dll 파일을 선택합니다. 플러그인 인스펙터의 Select platforms for plugin에서 Any Platform을 비활성화합니다. Include platforms에서 Editor 및 Standalone 플랫폼을 비활성화합니다. 그런 다음, 모든 DLL에 RoslynAnalyzer
라는 새로운 에셋 레이블을 지정합니다.
모든 요소가 정상 작동하는지 확인하기 위해 프로젝트의 Assets
폴더에 RethrowError.cs
라는 파일을 저장합니다. 이 코드는 ErrorProne.NET
이 잘못된 예외 전파와 수상한 예외 처리에 대한 경고를 발동하게 합니다.
using System;
using UnityEngine;
public class RethrowError : MonoBehaviour
{
void Update()
{
try
{
DoSomethingInteresting();
}
catch (Exception e)
{
Debug.Log(e.Message);
throw e;
}
}
private void DoSomethingInteresting()
{
throw new System.NotImplementedException();
}
}
이렇게 하면 콘솔 창에 다음의 두 가지 경고가 표시됩니다.
Assets\RethrowError.cs(14,23): warning EPC12: Suspicious exception handling: only e.Message is observed in exception block.
Assets\RethrowError.cs(15,19): warning ERP021: Incorrect exception propagation. Use throw; instead.
분석기는 Assets
폴더에 포함되거나 상위 폴더에 어셈블리 정의 파일이 없는 하위 폴더에 포함된 모든 어셈블리에 전역적으로 적용됩니다. 어셈블리 정의가 있는 폴더나 그러한 폴더의 하위 폴더에 있는 분석기는 해당 어셈블리 정의에서 생성된 어셈블리 및 이러한 어셈블리를 참조하는 다른 어셈블리에만 적용됩니다.
즉 패키지는 패키지를 사용하는 코드에만 적용되는 분석기를 제공할 수 있습니다. 이는 패키지 사용자가 패키지 API를 올바르게 사용하도록 안내하는 등의 경우에 도움이 됩니다.
프로젝트의 분석기에서 발생하는 다양한 경고 및 오류를 처리하는 방법에 대한 고유한 규칙을 정의하기 위해 규칙 집합 파일을 만들 수 있습니다. 커스텀 규칙 집합을 만드는 방법에 대한 자세한 내용은 커스텀 규칙 집합을 만드는 방법에 대한 Microsoft의 Visual Studio 문서를 참조하십시오.
Assets
루트 폴더에 Default.ruleset
이라는 이름의 규칙 집합 파일을 배치합니다. Default.ruleset
에서 정의한 규칙은 Assembly-CSharp.dll
과 같은 모든 사전 정의된 어셈블리 및 .asmdef
파일을 사용하여 빌드된 모든 어셈블리에 적용됩니다.
사전 정의된 어셈블리에 대해 Default.ruleset
의 규칙을 오버라이드하려면 루트 폴더에 [PredefinedAssemblyName].ruleset
이라는 이름의 .ruleset
파일을 만듭니다. 예를 들어, Assembly-CSharp.ruleset
의 규칙은 Assembly-CSharp.dll
의 코드에 적용됩니다. 루트 폴더에서는 다음의 .ruleset
파일만 허용됩니다.
Default.ruleset
Assembly-CSharp.ruleset
Assembly-CSharp-firstpass.ruleset
Assembly-CSharp-Editor.ruleset
Assembly-CSharp-Editor-firstpass.ruleset
Unity에서 규칙 집합 파일을 테스트하려면 다음 단계를 따르십시오.
Assets
폴더에 Subfolder
라는 하위 폴더를 만듭니다.Subfolder
내에서 다음을 수행합니다.
.asmdef
파일을 만듭니다.RethrowError.cs
의 복제본을 저장합니다.Assets
내부에 Default.ruleset
파일을 생성합니다.<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
<Rules AnalyzerId="ErrorProne.NET.CodeAnalyzers" RuleNamespace="ErrorProne.NET.CodeAnalyzers">
<Rule Id="ERP021" Action="Error" />
<Rule Id="EPC12" Action="None" />
</Rules>
</RuleSet>
Default.ruleset
파일은 다음 규칙을 정의합니다.
ERP021
을 오류로 등급을 높입니다.프로젝트에 규칙 집합 파일을 추가한 후 규칙을 적용할 어셈블리에 있는 스크립트를 다시 임포트하십시오. 이렇게 하면 Unity가 새 규칙 집합 파일을 사용하여 어셈블리를 다시 컴파일합니다. 재컴파일 후 콘솔 창에는 다음과 같은 두 개의 메시지가 표시됩니다.
Assets\Subfolder\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
Assets\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
Unity가 Default.ruleset
에 정의된 규칙을 Assets/RethrowError.cs
와 Assets/Subfolder/RethrowError.cs
모두에 적용한다는 점에 유의하십시오.
Assets/Subfolder
에서 .ruleset
파일을 생성한 후 원하는 이름을 지정합니다(이 예제에서는 Hello.ruleset
).
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="10.0">
<Rules AnalyzerId="ErrorProne.NET.CodeAnalyzers" RuleNamespace="ErrorProne.NET.CodeAnalyzers">
<Rule Id="ERP021" Action="Info" />
<Rule Id="EPC12" Action="Info" />
</Rules>
</RuleSet>
새로운 Hello.ruleset
파일은 Unity가 EPC12
와 ERP021
을 경고나 오류로 처리하지 않고 콘솔에 출력하도록 지시합니다.
Unity가 프로젝트를 다시 컴파일하면 콘솔 창에 다음의 메시지가 표시됩니다.
Assets\Subfolder\RethrowError.cs(14,23): info EPC12: Suspicious exception handling: only e.Message is observed in exception block.
Assets\Subfolder\RethrowError.cs(15,19): info ERP021: Incorrect exception propagation. Use throw; instead.
Assets\RethrowError.cs(15,19): error ERP021: Incorrect exception propagation. Use throw; instead.
Default.ruleset
의 규칙이 Assets\RethrowError.cs
에 여전히 적용되지만, Assets\Subfolder\RethrowError.cs
에는 더 이상 적용되지 않는데, 이는 Hello.ruleset
의 규칙에 의해 오버라이드되기 때문입니다.
허용되는 모든 규칙 집합 작업 파일에 대한 자세한 내용은 코드 분석 규칙 집합 에디터 사용에 대한 Visual Studio 문서를 참조하십시오.
다음은 인기 있는 다른 Roslyn 분석기 라이브러리의 Github 저장소에 대한 링크입니다.
2020.2에서 Roslyn 분석기 호환성 추가됨 NewIn20202