클리엘
CLIEL LAB
클리엘
전체 방문자
오늘
어제
  • 분류 전체보기 (514)
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (301)
      • C# (84)
      • ASP.NET (67)
      • Windows API for .NET (128)
    • Server (53)
      • SQL Server (10)
      • MariaDB (18)
      • Windows Server (6)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

태그

  • node.js
  • Windows API
  • exception
  • Kotlin
  • CSS3
  • c#
  • Entity Framework
  • NestJS
  • asp.net core
  • JavaScript
  • .NET
  • android
  • asp.net core web api
  • LINQ
  • jQuery
  • HTML5
  • MariaDB
  • ASP.NET
  • 변수
  • android studio

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

[C#] 인터페이스(Interface)와 상속(Inheriting) - 7. Code분석(StyleCop)
.NET/C#

[C#] 인터페이스(Interface)와 상속(Inheriting) - 7. Code분석(StyleCop)

2022. 6. 24. 11:58
728x90

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안과 밖 모든 곳에서 사용할 수 있게 됩니다.

728x90
저작자표시 비영리 변경금지 (새창열림)

'.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
    '.NET/C#' 카테고리의 다른 글
    • [C#] File 다루기 - 2. 스트림(Stream) 다루기
    • [C#] File 다루기 - 1. 파일 시스템(Filesystem)
    • [C#] 인터페이스(Interface)와 상속(Inheriting) - 6. 상속(Inheriting)
    • [C#] 인터페이스(Interface)와 상속(Inheriting) - 5. NULL
    클리엘
    클리엘
    누구냐 넌?

    티스토리툴바