10. code 분석하기
.NET analyzers 중 하나인 StyleCop은 작성된 코드의 잠재적인 문제점을 분석하고 이들에 대한 수정안을 파악하는 데 사용되는 분석도구입니다.
StyleCop을 사용해 보기 위해 .NET 6 버전을 기준으로 ConsoleApp 프로젝트를 생성한 다음 아래와 같이 Top-level programming 아닌 이번 방식의 Main() 메서드를 Program.cs에 작성합니다.
using System;
namespace myapp
{
class Program
{
private static void Main(string[] args)
{
}
}
}
그리고 Nuget을 통해 StyleCop.Analyzers 패키지를 추가합니다.
dotnet add package StyleCop.Analyzers
|
그리고 StyleCop을 위한 설정 파일이 필요한데 'stylecop.json'이라는 이름으로 프로젝트에 파일을 추가한 뒤 아래와 같은 내용으로 수정합니다.
{
"$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
"settings": {
}
}
참고로 $schema부분은 stylecop.json파일을 수정할 때 IntelliSense기능을 지원하도록 하기 위함입니다.
이제 프로젝트 파일(*. csproj)을 열어 위에서 생성한 stylecop.json파일을 어떻게 다룰 것인지를 아래와 같이 지정합니다.
<ItemGroup>
<None Remove="stylecop.json" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="stylecop.json" />
</ItemGroup>
첫 번째 ItemGroup부분은 프로젝트가 배포되는 경우에는 stylecop.json이 추가되지 않도록 조치하기 위함이며 두 번째 ItemGroup은 'development'환경에서 해당 파일을 추가시키기 위함입니다.
위와 같이 설정한 상태에서 프로젝트를 빌드하면 아래와 비슷한 경고 메시지를 하나 이상 보게 됩니다.
SA1200 Using directive should appear within a namespace declaration
|
● 경고 숨기기
해당 경고는 지시에 따라 수정하면 되지만 그럴 수 없거나 현재로 존치시켜야 하는 경우에는 경고를 인의적으로 숨길 수 있습니다.
그 첫 번째 방법으로는 attribute를 사용하는 것입니다. 예를 들어 SA1200에 관한 경고를 무시하려고 하면 프로젝트에 GlobalSuppressions.cs와 같은 파일을 생성하여 아래와 같이 attribute를 추가해 주거나
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1200:UsingDirectivesMustBePlacedWithinNamespace", Justification = "Reviewed.")]
특정 지시자를 경고에 해당하는 구문에 붙여줄 수 있습니다.
#pragma warning disable SA1200 // Using directives should be placed correctly
using System;
#pragma warning restore SA1200 // Using directives should be placed correctly
좀 더 전역적으로는 위에서 추가한 stylecop.json 파일에 해당 설정을 추가하는 방법이 있습니다.
{
"$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
"settings": {
"orderingRules": {
"usingDirectivesPlacement": "outsideNamespace"
}
}
}
참고로 위 설정을 'preserve'로 바꾸면 네임스페이스를 위한 using을 namespace안과 밖 모든 곳에서 사용할 수 있게 됩니다.
'.NET > C#' 카테고리의 다른 글
[C#] File 다루기 - 2. 스트림(Stream) 다루기 (0) | 2022.06.24 |
---|---|
[C#] File 다루기 - 1. 파일 시스템(Filesystem) (0) | 2022.06.24 |
[C#] 인터페이스(Interface)와 상속(Inheriting) - 6. 상속(Inheriting) (0) | 2022.06.24 |
[C#] 인터페이스(Interface)와 상속(Inheriting) - 5. NULL (0) | 2022.06.24 |
[C#] 인터페이스(Interface)와 상속(Inheriting) - 4. 참조타입과 값타입 (0) | 2022.06.24 |