Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 47. XmlCodeGenerator 1.0.0.4 업데이트 [링크 복사], [링크+제목 복사],
조회: 32777
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 5개 있습니다.)

XmlCodeGenerator 1.0.0.4 업데이트


예전에 제가 만들어 두었던 XmlCodeGenerator... 아시죠? ^^

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

혹시나 싶어서 Visual Studio 2010에서 돌려보니 잘 구동되는 것을 확인했습니다.

[그림 1: Visual Studio 2010에서 동작하고 있는 XmlCodeGenerator]
xmlcodegen_support_vs2010_1.png

만약 기존에 이미 Visual Studio 2008에서 사용하고 있었다면 자동으로 Visual Studio 2010에 올라오지 않기 때문에 한 번 더 등록 과정을 거쳐주면 됩니다. 등록 과정도 간단하지요. ^^

아래의 경로에서 "Tools"을 실행시키고,

DeveloperToolManager.application
; https://www.sysnet.pe.kr/Tools/DeveloperToolManager.application

Visual Studio 2010이 설치된 상태에서 [그림 2]에서 보는 것처럼 "Overwrite" 버튼을 눌러주시면 정상적으로 XmlCodeGenerator 사용자 정의 도구를 사용할 수 있습니다. ^^

[그림 2: XmlCodeGenerator 다시 등록]
xmlcodegen_support_vs2010_2.png




그 외에 작지만 유용한 기능 업데이트들을 했습니다.

1. XSLT 파일 찾기 기능 추가

XSLT의 파일 찾기 순서가 다음과 같이 개선되었습니다.

  1. XML 파일이 있는 폴더에서 XML 파일명과 동일한 이름의 XSLT 확장자를 가진 파일
  2. 1번의 파일이 없으면, XML 파일이 있는 폴더에서 default.xslt 이름의 파일
  3. 2번의 파일이 없으면, 루트 폴더까지 탐색하면서 1번과 같은 규칙의 XSLT 확장자를 가진 파일
  4. 3번의 파일이 없으면, 루트 폴더까지 탐색하면서 default.xslt 이름의 파일

2. 프로젝트 Namespace를 xsl:param으로 전달받는 기능

드디어 ^^ 프로젝트의 네임스페이스를 전달받을 수 있도록 했습니다. 사용 방법은 간단합니다.
만약 프로젝트의 Namespace 설정이 아래와 같이 "My.TestTool"로 설정되이 있는 경우,

[그림 3: 프로젝트의 기본 네임스페이스]
xmlcodegen_support_vs2010_3.png

이 문자열을 XSLT에서 얻기 위해 다음과 같이 "XCG_Namespace"라는 이름의 xsl:param으로 받아서 사용할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
    <xsl:param name="XCG_Namespace"/>

    <xsl:template match="definitions">

/*
Namespace: <xsl:value-of select="$XCG_Namespace" />
*/
    </xsl:template>
</xsl:stylesheet>

만약 특정 XML에서만 네임스페이스를 변경하고 싶다면 Visual Studio에서 해당 XML 파일을 선택하고, 다음과 같이 속성창에서 "Custom Tool Namespace"를 바꿔줄 수 있습니다.

[그림 4: Custom Tool Namespace 변경]
xmlcodegen_support_vs2010_4.png

3. 중앙 관리화할 수 있는 XSLT 파일 찾기

위의 1번 과정에서 설명한 XSLT 파일 찾기의 경우 프로젝트가 위치한 폴더 기반의 상위 루트에 XSLT 파일이 있도록 해두었는데 어찌 보면 이런 파일 경로 풀이는 매우 불편할 수 있습니다. 그래서 생각해 낸 것이 XSLT 파일을 중앙 관리할 수 있는 경로 풀이를 하나 더 추가했습니다. 사용법 역시 매우 간단합니다.

사용자는 XML 파일에 다음과 같이 "xcg-xsltKey"라는 Processing Instruction을 두어서 XSLT 파일을 구분할 수 있는 키를 정의할 수 있도록 했습니다.

<?xml version="1.0" encoding="utf-8" ?>
<?xcg-xsltKey WPF.ClassMemberDef?>

<my>
  
</my>

위에서는 xcg-xsltKey 값으로 "WPF.ClassMemberDef"가 설정되어 있는데요. 이렇게 되면 이 XML 파일을 변형할 XSLT 파일을 다음의 경로에서 찾게 됩니다.

XSLT 경로: [XmlCodeGenerator가 설치된 경로]\WPF.ClassMemberDef.xslt

만약, XmlCodeGenerator를 "C:\Tools"에 설치했다면 찾아오는 XSLT 경로는 "C:\Tools\WPF.ClassMemberDef.xslt"가 됩니다. 이렇게 되면 모든 프로젝트에서 동일한 "xcg-xsltKey"라는 동일한 PI(Processing Instruction)를 두고 재사용하는 것이 가능합니다.




뭐... 이 정도면 많이 쓸만해졌죠! ^^



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

[연관 글]






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

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

비밀번호

댓글 작성자
 



2009-08-18 01시09분
[짜두] 날마다 업뎃되는군요 ^^
[guest]
2016-06-14 12시28분
정성태

... 31  32  33  34  35  36  37  [38]  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
12701정성태7/9/20218741.NET Framework: 1075. C# - ThreadPool의 스레드는 반환 시 ThreadStatic과 AsyncLocal 값이 초기화 될까요?파일 다운로드1
12700정성태7/8/20219082.NET Framework: 1074. RuntimeType의 메모리 누수? [1]
12699정성태7/8/20217892VS.NET IDE: 167. Visual Studio 디버깅 중 GC Heap 상태를 보여주는 "Show Diagnostic Tools" 메뉴 사용법
12698정성태7/7/202111851오류 유형: 732. Windows 11 업데이트 시 3% 또는 0%에서 다운로드가 멈춘 경우
12697정성태7/7/20217692개발 환경 구성: 574. Windows 11 (Insider Preview) 설치하는 방법
12696정성태7/6/20218335VC++: 146. 운영체제의 스레드 문맥 교환(Context Switch)을 유사하게 구현하는 방법파일 다운로드2
12695정성태7/3/20218376VC++: 145. C 언어의 setjmp/longjmp 기능을 Thread Context를 이용해 유사하게 구현하는 방법파일 다운로드1
12694정성태7/2/202110406Java: 24. Azure - Spring Boot 앱을 Java SE(Embedded Web Server)로 호스팅 시 로그 파일 남기는 방법 [1]
12693정성태6/30/20218057오류 유형: 731. Azure Web App Site Extension - Failed to install web app extension [...]. {1}
12692정성태6/30/20217988디버깅 기술: 180. Azure - Web App의 비정상 종료 시 남겨지는 로그 확인
12691정성태6/30/20218742개발 환경 구성: 573. 테스트 용도이지만 테스트에 적합하지 않은 Azure D1 공유(shared) 요금제
12690정성태6/28/20219598Java: 23. Azure - 자바(Java)로 만드는 Web App Service - Tomcat 호스팅
12689정성태6/25/202110206오류 유형: 730. Windows Forms 디자이너 - The class Form1 can be designed, but is not the first class in the file. [1]
12688정성태6/24/20219868.NET Framework: 1073. C# - JSON 역/직렬화 시 리플렉션 손실을 없애는 JsonSrcGen [2]파일 다운로드1
12687정성태6/22/20217794오류 유형: 729. Invalid data: Invalid artifact, java se app service only supports .jar artifact
12686정성태6/21/202110294Java: 22. Azure - 자바(Java)로 만드는 Web App Service - Java SE (Embedded Web Server) 호스팅
12685정성태6/21/202110538Java: 21. Azure Web App Service에 배포된 Java 프로세스의 메모리 및 힙(Heap) 덤프 뜨는 방법
12684정성태6/19/20218981오류 유형: 728. Visual Studio 2022부터 DTE.get_Properties 속성 접근 시 System.MissingMethodException 예외 발생
12683정성태6/18/202110447VS.NET IDE: 166. Visual Studio 2022 - Windows Forms 프로젝트의 x86 DLL 컨트롤이 Designer에서 오류가 발생하는 문제 [1]파일 다운로드1
12682정성태6/18/20218073VS.NET IDE: 165. Visual Studio 2022를 위한 Extension 마이그레이션
12681정성태6/18/20217430오류 유형: 727. .NET 2.0 ~ 3.5 + x64 환경에서 System.EnterpriseServices 참조 시 CS8012 경고
12680정성태6/18/20218567오류 유형: 726. python2.7.exe 실행 시 0xc000007b 오류
12679정성태6/18/20219095COM 개체 관련: 23. CoInitializeSecurity의 전역 설정을 재정의하는 CoSetProxyBlanket 함수 사용법파일 다운로드1
12678정성태6/17/20218301.NET Framework: 1072. C# - CoCreateInstance 관련 Inteop 오류 정리파일 다운로드1
12677정성태6/17/20219935VC++: 144. 역공학을 통한 lxssmanager.dll의 ILxssSession 사용법 분석파일 다운로드1
12676정성태6/16/20219819VC++: 143. ionescu007/lxss github repo에 공개된 lxssmanager.dll의 CLSID_LxssUserSession/IID_ILxssSession 사용법파일 다운로드1
... 31  32  33  34  35  36  37  [38]  39  40  41  42  43  44  45  ...