ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 빌드 이벤트를 통해 자동화를 완성하자
    개발/C# 2024. 12. 27. 14:17

    PacketGenerator를 통해 패킷을 자동으로 만든다. 여기에서 관리하는 패킷의 변경사항이 있을 때 한 번의 빌드로, 이 패킷 파일을 사용하는 프로젝트에 자동으로 파일이 복사가 되면 편의성이 올라갈 것이다.

     

    패킷을 수정하고 나서, 자동화 코드를 통해 패킷이 자동 생성되는데 이를 일일이 손으로 복사 붙여넣기를 하면 시간도 걸리고 휴먼 에러가 발생할 가능성이 높아진다. 이 부분에 대한 자동화다.

     

    비주얼 스튜디오의 옵션 중에 빌드 이벤트가 존재하고 세부적으로는 빌드 전 이벤트, 빌드 후 이벤트가 있다. 우리는 빌드를 하고 나서 배치 파일을 실행해 패킷 파일을 각 프로젝트로 복사할 것이기 때문에 빌드 후 이벤트를 활용해보자.

     

    1. 프로젝트 속성에 기입하는 방법이 있다.

     

    2. 동일한 내용을 프로젝트 파일에도 태그 형식으로 기입할 수 있다. 다음 내용은 ProjectGroup 태그 안에 넣을 필요 없고 Project 태그 안에만 존재하면 된다.

      <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    	<Exec Command="CALL D:\CSharpServer\Server\Common\Packet\GeneratePackets.bat" />
      </Target>

     

    최초에는 빌드 이후에 배치 파일을 별도로 실행해줘야 하는 형식이었는데, 그것 또한 누락할 수 있는 실수이기 때문에 그 모든 과정을 통합하는 게 편하다. 그 과정을 조금 더 세부적으로 보자.

    1. PacketGenerator 프로젝트를 빌드한다.

    2. 빌드 후 이벤트로 GeneratePackets.bat이 실행된다.

    3. 배치 파일을 실행하면 PacketGenerator의 빌드 결과물인 실행 파일을 통해, 패킷의 스키마인 PDL.xml을 파싱해 패킷 cs 파일을 만들어낸다

       - 참고로 터미널에서 배치파일을 실행할 때 해당 명령어가 실행되는 위치가 아니라 실제 배치파일의 위치를 기준으로 동작하게 하려면(경로 문제등 때문에), 배치 파일의 맨 뒤에 pushd %~dp0를 넣어주고 배치 파일의 끝에 popd를 넣어준다

       - d는 디렉토리의 약자인데 %~dp0은 "현재 실행 중인 배치 파일이 위치한 드라이브와 경로"를 의미한다

    4. 그렇게 만들어진 패킷 파일을 패킷 파일을 사용하는 프로젝트에 XCOPY를 수행한다

     

    작은 문제가 하나 있는데, PacketGenerator 프로젝트에 변경사항이 있어도 빌드만 해서는 반영이 안 되고 재빌드도 두 번을 해야 한다는 것이다. 이 문제는 추후에 해결이 되면 내용을 추가하겠다.

    댓글

Designed by Tistory.