Microsoft MVP성태의 닷넷 이야기
VS.NET IDE: 78. Visual Studio 확장으로 XmlCodeGenerator 제작하는 방법 [링크 복사], [링크+제목 복사],
조회: 28165
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




1  2  3  4  5  6  7  [8]  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13779정성태10/22/20245606개발 환경 구성: 729. WSL 2 - Mariner VM 커널 이미지 업데이트 방법
13778정성태10/21/20247123C/C++: 181. C/C++ - 소스코드 파일의 인코딩, 바이너리 모듈 상태의 인코딩
13777정성태10/20/20245555Windows: 265. Win32 API의 W(유니코드) 버전은 UCS-2일까요? UTF-16 인코딩일까요?
13776정성태10/19/20246585C/C++: 180. C++ - 고수준 FILE I/O 함수에서의 Unicode stream 모드(_O_WTEXT, _O_U16TEXT, _O_U8TEXT)파일 다운로드1
13775정성태10/19/20246617개발 환경 구성: 728. 윈도우 환경의 개발자를 위한 UTF-8 환경 설정
13774정성태10/18/20246181Linux: 91. Container 환경에서 출력하는 eBPF bpf_get_current_pid_tgid의 pid가 존재하지 않는 이유
13773정성태10/18/20245970Linux: 90. pid 네임스페이스 구성으로 본 WSL 2 + docker-desktop
13772정성태10/17/20246192Linux: 89. pid 네임스페이스 구성으로 본 WSL 2 배포본의 계층 관계
13771정성태10/17/20245933Linux: 88. WSL 2 리눅스 배포본 내에서의 pid 네임스페이스 구성
13770정성태10/17/20246397Linux: 87. ps + grep 조합에서 grep 명령어를 사용한 프로세스를 출력에서 제거하는 방법
13769정성태10/15/20247516Linux: 86. Golang + bpf2go를 사용한 eBPF 기본 예제파일 다운로드1
13768정성태10/15/20246789C/C++: 179. C++ - _O_WTEXT, _O_U16TEXT, _O_U8TEXT의 Unicode stream 모드파일 다운로드2
13767정성태10/14/20245699오류 유형: 929. bpftrace 수행 시 "ERROR: Could not resolve symbol: /proc/self/exe:BEGIN_trigger"
13766정성태10/14/20245174C/C++: 178. C++ - 파일에 대한 Text 모드의 "translated" 동작파일 다운로드1
13765정성태10/12/20246436오류 유형: 928. go build 시 "package maps is not in GOROOT" 오류
13764정성태10/11/20247020Linux: 85. Ubuntu - 원하는 golang 버전 설치
13763정성태10/11/20245927Linux: 84. WSL / Ubuntu 20.04 - bpftool 설치
13762정성태10/11/20246100Linux: 83. WSL / Ubuntu 22.04 - bpftool 설치
13761정성태10/11/20245798오류 유형: 927. WSL / Ubuntu - /usr/include/linux/types.h:5:10: fatal error: 'asm/types.h' file not found
13760정성태10/11/20246928Linux: 82. Ubuntu - clang 최신(stable) 버전 설치
13759정성태10/10/20247946C/C++: 177. C++ - 자유 함수(free function) 및 주소 지정 가능한 함수(addressable function) [6]
13758정성태10/8/20246634오류 유형: 926. dotnet tools를 sudo로 실행하는 경우 command not found
13757정성태10/8/20246931닷넷: 2306. Linux - dotnet tool의 설치 디렉터리가 PATH 환경변수에 자동 등록이 되는 이유
13756정성태10/8/20247120오류 유형: 925. ssh로 docker 접근을 할 때 "... malformed HTTP status code ..." 오류 발생
13755정성태10/7/20247680닷넷: 2305. C# 13 - (9) 메서드 바인딩의 우선순위를 지정하는 OverloadResolutionPriority 특성 도입 (Overload resolution priority)파일 다운로드1
13754정성태10/4/20246772닷넷: 2304. C# 13 - (8) 부분 메서드 정의를 속성 및 인덱서에도 확대파일 다운로드1
1  2  3  4  5  6  7  [8]  9  10  11  12  13  14  15  ...