아쉽게도 VisualStudio2012버전 부터는 Macro IDE기능을 사용할 수 없게 됐다.

개인적으로 Doxygen용 자동주석 매크로기능을 위해 활용하고 있었는데

VS2012부터 보이지 않아 어디에 숨겼는지 한참을 찾았다.

결국 구글링을 해보니 MS에서 의도적으로 뺀거라고 한다. 전체 VS유저중 사용률이 1%미만 이라나.

Macro외에도 tool 전체의 Performance향상을 위해 몇몇 IDE기능을 줄였다고 한다.

http://social.msdn.microsoft.com/Forums/vstudio/en-US/d8410838-085b-4647-8c42-e31b669c9f11/macros-in-visual-studio-11-developer-preview

 

암튼 자동 주석같은 매크로 기능은 플러그인 프로젝트를 통해 계속 이용할 수 있다. :)

 

1. Visual Studio 추가기능 프로젝트 생성

적당한 이름으로 생성해 준다.

2. 확장 기능을 개발할 언어를 선택해준다. (난 C# 으로)

3. 메뉴에 확장기능 항목이 추가되도록 한다. (우리가 만든 확장기능은 도구 메뉴에서 확인가능하다.)

이후에는 계속 다음을 눌러 프로젝트가 생성되도록 한다.

 

4. Connect.cs파일에서 Exec함수를 찾고 아래 내용을 추가한다.

Exec라는 함수이름 대로 우리가 개발한 확장기능을 나중에 VS에서 사용할때 호출되는 함수다. (사진 클릭해서 원본으로 보기)

 

5. 컴파일이 성공하면 종료 후 다시 실행한다.

적당한 프로젝트 하나를 연 후 소스코드의 적당한 위치에 커서를 위치 시키고 "도구" 메뉴에 우리가 추가한 플러그인을 실행한다.

Doxygen 주석이 추가된걸 확인할 수 있다.

 

6. 매번 메뉴를 클릭하는건 귀찮으니 우리가 개발한 확장기능에 단축키를 할당할 수 도 있다.

도구 - 옵션 - 키보드 선택 후 comment(프로젝트 이름)로 검색하면 개발한 확장기능이 검색된다.

선택 후 "바로 가기 키 누르기"에서 적당한 단측키를 할당해준다.(Ctrl + `은 개인적으로 사용하지 않는 키라서 이걸로 정했음)

확인을 누르고 닫은 후 앞으로는 메뉴 대신 위에서 할당한 단축키를 사용하면 된다.

 

7. 확장기능 배포

내가 만든 확장기능은 dll형태로 일반 프로젝트와 동일하게 프로젝트 폴더(Debug나 Release)에 생성된다.

VS에 설치되는 폴더는 C:\Users\jung\Documents\Visual Studio 2012\Addins 이며 FunctionComment - For Testing.AddIn

이라는 파일명으로 위자드가 자동 생성해준 것을 볼수 있다.

파일을 메모장으로 열어보면 <Assembly> 항목에 우리가 만든 dll위치가 들어가 있는것을 볼수 있는데

원하는 위치에 dll을 설치하고 이 경로만 바꿔주면 된다.

 

 

 

 추가한 소스

public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
  {
   handled = false;
   if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
   {
    if(commandName == "Doxgen2012.Connect.Doxgen2012")
    {
                    EnvDTE.TextSelection textSelection = (EnvDTE.TextSelection)_applicationObject.ActiveWindow.Selection;
                    textSelection.Insert("//-----------------------------------------------------------------------------------//");
                    textSelection.NewLine();
                    textSelection.Insert("//");
                    textSelection.NewLine();
                    textSelection.Insert("// @brief     :  ");
                    textSelection.NewLine();
                    textSelection.Insert("// @param     :  ");
                    textSelection.NewLine();
                    textSelection.Insert("// @return    :  ");
                    textSelection.NewLine();
                    textSelection.Insert("// @author    :  ");
                    textSelection.Insert(System.Environment.UserName);
                    textSelection.NewLine();
                    textSelection.Insert("// @date      :  ");
                    textSelection.Insert(System.DateTime.Now.ToLongDateString());
                    textSelection.Insert("  ");
                    textSelection.Insert(System.DateTime.Now.ToLongTimeString());
                    textSelection.NewLine();
                    textSelection.Insert("//");
                    textSelection.NewLine();
                    textSelection.Insert("//-----------------------------------------------------------------------------------//");

     handled = true;
     return;
    }
   }
  }
  private DTE2 _applicationObject;
  private AddIn _addInInstance;
 } 

 

 

 

 참고 : http://www.dzone.com/articles/missing-macros-visual-studio

 

+ Recent posts