2016-09-22 11 views
1

EnvDTE 네임 스페이스의 CodeFunction 개체가 있습니다. 나는 그것의 정의를 얻고 싶다; 예 :CodeFunction에서 함수 정의를 어떻게 얻을 수 있습니까?

private void MenuItemCallback(object sender, EventArgs e) 
{ 
    MessageBox.Show("Try"); 
} 

첫 줄을 문자열로 지정하고 싶습니다. 내가 지금까지 시도 무엇

,

1) 문자열에 추가 루프에서 다음 CodeFunction의 유형 (복귀 형) 및 매개 변수를 얻어서 문자열을보십시오. 그러나 매개 변수 유형의 이름은 "System.UInt32"와 같아지기를 원하지 않습니다. 또한이 문제는 ref Guid pguidCmdGroup을 완전히 취하지 않을 수 있습니다. 나는 이것에 심판을 건너 뛰는 것을 두려워한다.

2) CodeFunction의 기능을 사용하려고했지만 간단한 이름 만 사용할 수있었습니다.

3) CodeFunction의 시작점과 끝점에서 쓰기를 시도했지만 두 TextPoint를 string으로 바꿀 수있는 방법을 찾지 못했습니다. 끝점이 정의의 끝이 아니라 자체 자체 기능임을 알았습니다. 나는 싫어.

private void MenuItemCallback(object sender, EventArgs e) 또는 MenuItemCallback(object sender, EventArgs e)을 어떻게 간단히 얻을 수 있습니까?

도움 주셔서 감사합니다.
함수의 전체 소스를 읽은 후 처음 열린 중괄호 전에 코드를 차단 :

+0

이것이 가능하지 않다면 놀랄 일이 아닙니다. 컴파일 과정에서'string' 코드가 기계어로 번역됩니다. –

+0

어쩌면 거기에/검색/등 편집 할 수있는 몇 가지 확장명이 있습니다. 편집기 또는 활성 문서에서 메서드 정의를 가져 오는 방법이 없습니까? – mtilhan

답변

0

당신은 GetStartPoint()GetEndPoint()를 사용해야합니다.

// Retrieve the source code for the function. 
TextPoint start = codeFunction.GetStartPoint(vsCMPart.vsCMPartHeader); 
TextPoint finish = codeFunction.GetEndPoint(); 

string fullSource = start.CreateEditPoint().GetText(finish); 

// Find the first open curly brace 
int openCurlyBracePos = fullSource.IndexOf('{'); 

string declaration = String.Empty; 
if (openCurlyBracePos > -1) { 
    declaration = fullSource.Substring(0, openCurlyBracePos).Trim(); 
}