Microsoft MVP성태의 닷넷 이야기
VS.NET IDE: 78. Visual Studio 확장으로 XmlCodeGenerator 제작하는 방법 [링크 복사], [링크+제목 복사],
조회: 26856
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 4개 있습니다.)
(시리즈 글이 6개 있습니다.)
VS.NET IDE: 77. Visual Studio 확장(VSIX) 만드는 방법
; https://www.sysnet.pe.kr/2/0/1515

VS.NET IDE: 78. Visual Studio 확장으로 XmlCodeGenerator 제작하는 방법
; https://www.sysnet.pe.kr/2/0/1518

VS.NET IDE: 115. Visual Studio 확장(VSIX)을 이용해 사용자 메뉴 추가하는 방법
; https://www.sysnet.pe.kr/2/0/11184

VS.NET IDE: 116. Visual Studio 확장(VSIX)을 이용해 사용자 메뉴 추가하는 방법 (2) - 동적 메뉴 구성
; https://www.sysnet.pe.kr/2/0/11185

VS.NET IDE: 117. Visual Studio 확장(VSIX)을 이용해 사용자 매크로를 추가하는 방법
; https://www.sysnet.pe.kr/2/0/11186

VS.NET IDE: 165. Visual Studio 2022를 위한 Extension 마이그레이션
; https://www.sysnet.pe.kr/2/0/12682




Visual Studio 확장으로 XmlCodeGenerator 제작하는 방법

Visual Studio Package 만드는 방법도 알았으니,

Visual Studio 확장(VSIX) 만드는 방법
; https://www.sysnet.pe.kr/2/0/1515

실습을 한번 해봐야죠. ^^ 메뉴 추가하는 거야 너무 쉬우니, 예전에 만들어 둔 XmlCodeGenerator를 이참에 Visual Studio Package 프로젝트로 포팅해봐야겠습니다.

XML/XSLT로 구현하는 매크로 확장
; https://www.sysnet.pe.kr/2/0/542

XmlCodeGenerator 1.0.0.4 업데이트
; https://www.sysnet.pe.kr/2/0/760

XmlCodeGenerator를 C/C++ 코드 생성에 적용
; https://www.sysnet.pe.kr/2/0/775




VSPackage 프로젝트로 만드는 Single File Generator에 대한 자세한 문서가 Microsoft에 의해 공개되어 있습니다.

Single File Generator
; http://codemsdn.answerabc.com/sfgdd

Single_File_Generator_Sample.docx
; http://codemsdn.answerabc.com/Single-File-Generator-94d856d4/file/112/0/Single_File_Generator_Sample.docx

VSPakcage를 이용하는 경우 Single File Generator가 2가지 면에서 간단해지는데요.

  1. 등록 과정을 Visual Studio가 대행해 주므로 그와 관련된 코드가 필요 없어짐.
  2. 기존에 따로 포함했던 BaseCodeGeneratorWithSite가 Visual Studio 관련 어셈블리에 미리 포함되어 있음.

특히, 등록 과정을 신경쓸 필요 없다는 가장 큰 희소식입니다. ^^

자, 그럼 만들어 볼까요?

새롭게 Visual Studio Package 프로젝트를 생성하고, 3번째 단계에서 소스코드 생성과 관련있는 것이 없기 때문에 이번에는 비어있는 체로 넘어갑니다.

vsp_xmlcodegen_1.png

프로젝트가 생성되었으면 다음의 3가지 어셈블리를 참조 추가합니다.

  • Microsoft.VisualStudio.TextTemplating.VSHost.11.0
  • VSLangProj80
  • Microsoft.VisualStudio.Designer.Interfaces

마지막으로 BaseCodeGeneratorWithSite 타입을 상속받아 원하는 동작의 Single_File_Generator 코드를 구현한 후 다음과 같이 특성을 부여해 주면 레지스트리 등록 과정이 자동으로 처리됩니다.

[Guid(XmlCodeGenerator.RefGuid)]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[CodeGeneratorRegistration(typeof(XmlCodeGenerator), "C# XML Code Generator", vsContextGuids.vsContextGuidVCSProject, GeneratesDesignTimeSource = true)]
[CodeGeneratorRegistration(typeof(XmlCodeGenerator), "VB XML Code Generator", vsContextGuids.vsContextGuidVBProject, GeneratesDesignTimeSource = true)]
[ProvideObject(typeof(XmlCodeGenerator))]
public class XmlCodeGenerator : BaseCodeGeneratorWithSite
{
    // ...[생략]...
}

정말 쉽죠. ^^ 이렇게 만들고 빌드하면 vsix 확장자 파일이 생기고 이를 배포해 주면 됩니다. 하는 김에 Visual Studio Gallery에 올려봤습니다.

Visual Studio Gallery - XmlCodeGenerator
; http://visualstudiogallery.msdn.microsoft.com/20163975-c675-4f1c-986f-d2489136469d

그래서 이젠 Visual Studio의 확장 도구에서 다음과 같이 검색됩니다. ^^

vsp_xmlcodegen_2.png

전체 소스코드는 다음에 공개해 두었으니 참고하세요.

XmlCodeGenerator 
; https://github.com/stjeong/XmlCodeGenerator




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/8/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 76  77  78  [79]  80  81  82  83  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11961정성태6/27/201917848Graphics: 37. C# - PLplot - 출력 모음(Family File Output)
11960정성태6/27/201918923Graphics: 36. C# - PLplot의 16색 이상을 표현하는 방법과 subpage를 이용한 그리드 맵 표현
11959정성태6/27/201920092Graphics: 35. matplotlib와 PLplot의 한글 처리
11958정성태6/25/201924629Linux: 18. C# - .NET Core Console로 리눅스 daemon 프로그램 만드는 방법 [6]
11957정성태6/24/201922947Windows: 160. WMI 쿼리를 명령행에서 간단하게 수행하는 wmic.exe [2]
11956정성태6/24/201921455Linux: 17. CentOS 7에서 .NET Core Web App 실행 환경 구성 [1]
11955정성태6/20/201919779Math: 60. C# - 로지스틱 회귀를 이용한 분류파일 다운로드1
11954정성태6/20/201918529오류 유형: 550. scp - sudo: no tty present and no askpass program specified
11953정성태6/20/201916721오류 유형: 549. The library 'libhostpolicy.so' required to execute the application was not found in '...'
11952정성태6/20/201917410Linux: 16. 우분투, Centos의 Netbios 호스트 이름 풀이 방법
11951정성태6/20/201920606오류 유형: 548. scp 연결 시 "Permission denied" 오류 및 "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" 경고
11950정성태6/18/201920793.NET Framework: 845. C# - 윈도우 작업 관리자와 리소스 모니터의 메모리 값을 구하는 방법
11949정성태6/18/201916127오류 유형: 547. CoreCLR Profiler 예제 프로젝트 빌드 시 컴파일 오류 유형
11948정성태6/17/201918554Linux: 15. 리눅스 환경의 Visual Studio Code에서 TFS 서버 연동
11947정성태6/17/201920297Linux: 14. 리눅스 환경에서 TFS 서버 연동
11946정성태6/17/201921271개발 환경 구성: 445. C# - MathNet으로 정규 분포를 따르는 데이터를 생성, PLplot으로 Histogram 표현파일 다운로드1
11945정성태6/17/201919015Linux: 13. node.js에서 syslog로 출력하는 방법
11944정성태6/16/201925384Linux: 12. Ubuntu 16.04/18.04에서 node.js 최신 버전 설치 방법
11943정성태6/15/201918617.NET Framework: 844. C# - 박싱과 언박싱 [1]
11942정성태6/13/201924844개발 환경 구성: 444. 로컬의 Visual Studio Code로 원격 리눅스 머신에 접속해 개발하는 방법 [1]
11941정성태6/13/201917519오류 유형: 546. "message NETSDK1057: You are using a preview version of .NET Core" 빌드 경고 없애는 방법
11940정성태6/13/201917784개발 환경 구성: 443. Visual Studio의 Connection Manager 기능(Remote SSH 관리)을 위한 명령행 도구파일 다운로드1
11939정성태6/13/201916550오류 유형: 545. Managed Debugging Assistant 'FatalExecutionEngineError'
11938정성태6/12/201919088Math: 59. C# - 웨이트 벡터 갱신식을 이용한 퍼셉트론 분류파일 다운로드1
11937정성태6/11/201925429개발 환경 구성: 442. .NET Core 3.0 preview 5를 이용해 Windows Forms/WPF 응용 프로그램 개발 [1]
11936정성태6/10/201918369Math: 58. C# - 최소 자승법의 1차, 2차 수렴 그래프 변화 확인 [2]파일 다운로드1
... 76  77  78  [79]  80  81  82  83  84  85  86  87  88  89  90  ...