MSBuild의 바이너리 로그 보기

4176 단어 MSBuildC#
개시하다
바이너리 로그를 15.3에서 MSBuild에 로그 출력으로 추가합니다.
능숙하게 사용할 수 있다면 MSBuild의 고장 제거, 분석 등에 도움이 될 수 있으므로 독법 등을 써야 한다.
또한 msbuild 자체에 대한 설명은 이 글에 없습니다docs 문서 참조
바이너리 로그
우선 이진 기록이 어떤 것인지 설명하고 싶다.
자세한 내용은 github 문서 참조.
어떤 물건이냐면요.
MSBuild에서 수행된 작업, 설정된 속성 등의 정보를 담은 이른바 실행 로그입니다.
서식이 엄격한 문서화가 아니라 사용자가 준비된 API를 사용합니다.
방문과 같은 형식이 되다.
소스가 공개됐기 때문에 관심 있는 분들은 보셔도 됩니다.
언제 시작 해요?
생각나는 건 다음과 같은 상황입니다.
  • MSBuild 작업 문제 해결
  • 독립된 작업 등을 만들 때의 행위 확인(파라미터가 전달되었는지, 필요한 작업을 수행했는지 등)
  • 2진 로그에서 나온 프로젝트 분석

  • 예를 들어 Buildalyzer 구축 결과로부터 어떤 처리를 하고자 하는 경우
  • Buildalyzer에 대해 후술한 구조화 로그에서 재구성하고 해석
  • 장점
  • 컴팩트하고 상세한 정보
  • msbuild에 해당하는 diagnostics 등급의 정보를 얻을 수 있고 파일 크기가 텍스트 출력보다 작아진다(10배에서 20배 정도)
  • 출력 CPU 오버헤드도 적음
  • 프로그램을 통해 해석 가능
  • 텍스트 로그에 어쨌든 비정형적인 부분이 나타나 해석이 번거롭지만 해석용 API를 사용하면 정보의 취사 선택을 쉽게 할 수 있다
  • 다른 형식으로 재해석 가능
  • 예를 들어 텍스트 로그나 독립형으로 변환할 수도 있다
  • 생성 방법
    msbuild 명령을 실행할 때 /bl 옵션을 지정합니다.기본적으로 msbuild.binlog의 이름으로 생성되지만 /bl:[ファイル名]에서 임의의 파일로 출력할 수 있습니다.
    dotnet-sdk에서 생성하려면 dotnet msbuild 명령을 사용합니다.dotnet build 명령의 경우 dotnet build -bl [ファイル名]에서 지정할 수 있습니다.
    로그 뷰어에서 보기
    API에서도 읽을 수 있지만 GUI에서 내려다보고 싶은 경우 권장MSBuild Log Viewer.
    또한, 현재(v2.0.64)에도 WPF가 쓰여있는 Windows 전용 패턴입니다.최근dotnetsdk-3.0이 정식으로 발표되면 상황이 바뀔 수 있습니다.
    소스에서 맥OS 버전(Avalonia 사용)을 구축할 수 있기 때문에 이것도 사용할 수 있다.v2.1.561의 시점에서 아직 발표 자산에 들어가지 않았는데 그 중에서 이미 구축된 2진법이 있을 수 있다.
    구조화 로그 정보
    MSBuild Log Viewer에서 위의 Binary Log를 응용 프로그램에 더 적합한 재구성 Structured Log로 변환하여 해석합니다.
    이것은 DOM 트리 구조를 만들기 위한 것이고 BinaryLog은 순차적인 출력입니다.
    비니로그 사이즈보다 1/10 정도 크지만 비니로그를 재구성하기는 어렵기 때문에 주의해야 한다.
    또한 트리 구조를 모두 메모리에 펼치는 것이 전제이기 때문에 거대한 기록 파일을 처리하는 상황에서 주의해야 한다.
    프로그램 라이브러리는 넷표준입니다 따라서 비Windows 환경 등에서 해석을 하려면 유용할 수 있습니다.
    기본 화면
    화면을 시작하면 생성된 기록 파일*.binlog이나 *.buildlog을 열면 다음과 같은 화면이 된다.

    기본적으로 왼쪽의 "Search Log"탭에 끼어 들어가서 오른쪽의 "Log"탭을 열고 확인하는 절차입니다.
    어떤 항목이 어떤 순서에 따라 분석되었는지 확인하다
    MSBuild가 어떤 순서로 파일을 분석했는지 알고 싶다면Evaluation 트리를 보세요.

    여기서 어떤 순서로 처리되었는지, 혹은 무엇을 처리했는지 확인할 수 있다(속성의 분배, 임무 집행 등).
    예를 들어 여러 항목(예를 들어 sln의 구축)을 뛰어넘는 구축 상황에서 여러 항목에 이 트리가 있을 수 있다.
    각 대상에 설정된 속성 및 항목 확인
    예를 들어 구축할 때 어떤 속성을 설정하고 어떤 항목을 대상으로 하는지 알고 싶으면 프로젝트 트리에 있어야 한다.
    오른쪽 트리의 프로젝트 이름 트리를 엽니다. 바로 아래에 있는 Properties와 Items는 각각 대상 내 PropertyGroup과 ItemGroup의 최종 설정 값입니다.
    또한sln빌딩처럼 친자관계의 목표가 있는 상황에서 건축물은 나무 위에 있기 때문에 나무를 따라 걸어갈 필요가 있다.
    개별 작업과 작업의 매개 변수 확인
    msbuild은 대체로 Project Target-Task와 관련이 있지만 최소 단위인 Task에 어떤 파라미터가 분배되었는지 확인하려면 각 프로젝트의'Target'노드의 분배하에'Task'노드가 있는데 그곳을 확인하면 어떤 파라미터가 전달되었는지 확인할 수 있습니다.경과 초수도 확인할 수 있다.
    또 찾고 싶은 Task의 이름을 알고 있다면 왼쪽'Search Log'$task [タスク名]에 이렇게 입력하면 대상의 정보를 줄일 수 있다.Task는 작은 프로젝트라도 다양하게 활용할 수 있다고 생각합니다.
    해석된 파일이 어디에 있는지 확인하기
    분석 파일의 경로를 알고 싶으면 왼쪽의 Files 탭에서 경로를 확인하십시오.
    바이너리 로그를 만들 때와 같은 디렉터리 구조라면 그 내용도 확인할 수 있다.
    최후
    MSBuild의 해석이기 때문에 평소 들어오는 경우가 적을 수 있지만 자신이 MSBuild에 대해 다양한 해킹을 하고 싶다면 매우 유용하고 도움이 된다면 좋겠다.
    이후에 어렵게 해석한 부분을 프로그램 라이브러리로 삼았는데 시간이 있으면 프로그램 분석 방법을 소개해 줬으면 좋겠어요.

    좋은 웹페이지 즐겨찾기