'개발툴'에 해당되는 글 9건

  1. 2009/02/20 Visual Studio추가기능(Add-In) 만들기 - Part3
  2. 2009/02/14 Visual Studio추가기능(Add-In) 만들기 - Part2
  3. 2009/02/11 Visual Studio추가기능(Add-In) 만들기 - Part1
  4. 2008/04/01 VS Extensions 1.1인스톨후에 1.0에서 작성한 프로젝트를 인식못하는 문제..Vs Extensions 1.1のインストール後、1.0で作成したプロジェクトを認識できない。
  5. 2008/04/01 Visual Studio 2005 Extensions, Windows SharePoint Services 3.0버전 1.1
  6. 2007/12/30 VS2008 고마운 신기능
  7. 2007/12/10 진정한 웹다중Tier개발의 시작? VOLTA플랫폼
  8. 2007/06/12 WindowsClient.net 오픈
  9. 2007/05/11 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2)
2009/02/20 23:03

Visual Studio추가기능(Add-In) 만들기 - Part3

[VS2008,2005,2003] - Visual Studio추가기능(Add-In) 만들기 - Part2
의 부연 설명으로 IDTExtensibility2, DTCommandTarget 인터페이스의 간략한 설명으로 추가기능 만들기 내용을 끝내겠습니다.

IDTExtensibility2
메서드 설명
OnConnection Visual Studio가 추가기능을 로드할때 불려짐. 커맨드를 추가하거나 초기설정을 할때 사용함.
OnDisConnection Visual Studio가 추가기능을 언로드할때 불려짐. 추가기능에서 추가한 커맨드등을 삭제할때 사용함.
OnAddInsUpdate Visual Studio가 추가기능을 로드할때와 추가기능설정이 변경되었을때 불려짐.
OnStartupComplete Visual Studio가 추가기능의 로딩을 끝냈을때 불려짐.
OnBeginShutdown Visual Studio가 종료될때 불려짐.


DTCommandTarget
메서드 설명
Exec 유저가 커맨드를 실행했을때 불려짐. 커맨드의 실제 실행로직에 사용하면 됨.
QueryStatus Visual Studio의 상태가 변경되었을때 불려짐. 상황에 따라서 커맨드의 활성비활성화를 결정지을때 사용하면 됨.


마지막으로...추가기능을 배포에 관한 내용입니다.
기본적인 배포방법은 Add-In을 VS에서 사용하려면 애드인 정의XML을
My Documents\Visual Studio 2005\Addins 또는 My Documents\Visual Studio 2008\Addins에 복사해 넣고
(모든 PC사용자에게 사용가능하게 하려면 Documents and Settings\All Users\My Documents 에 넣으시면 됩니다.)
정의XML에 기입된 DLL의 장소(파일, url, GAC)에 DLL을 집어넣는것으로 배포는 끝입니다.
정말 간단한 방법에 MS에 감사드립니다..-.-

정의 XML과 배포에 대한 보다 자세한 내용은 아래의 링크로 대신하겠습니다.
http://msdn.microsoft.com/ko-kr/library/19dax6cz(VS.80).aspx -> 추가기능 등록

http://msdn.microsoft.com/ko-kr/library/keet1583(VS.80).aspx -> 기타 참고 제어 방법
저작자 표시 비영리 변경 금지
Trackback 0 Comment 0
2009/02/14 01:21

Visual Studio추가기능(Add-In) 만들기 - Part2

2009/02/11 - [VS2008,2005,2003] - Visual Studio추가기능(Add-In) 만들기 - Part1
에 이어서 VS에 간단한 추가기능을 추가해보도록 하겠습니다.

제일중요한 IDTExtensibility2와 IDTCommandTarget의 인터페이스에 대한 정리는 제일 나중에 정리하도록 하고..
일단 툴바메뉴에 버튼을 추가해보죠.


IDTExtensibility2의 인터페이스메서드중 하나인 OnConnection메서드에 아래와같은 코드를 입력해주시고
SetToolBar()라는 함수도 추가해주세요. SetToolBar는 실제 버튼을 등록하는 코드를 서브루틴으로 빼둔겁니다.

  public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
  {
   _applicationObject = (DTE2)application;
   _addInInstance = (AddIn)addInInst;
            switch (connectMode)
            {
                   
                case ext_ConnectMode.ext_cm_Startup:
                    SetToolBar();
                    break;

                case ext_ConnectMode.ext_cm_AfterStartup: 
                    SetToolBar();
                    break;

                case ext_ConnectMode.ext_cm_CommandLine:
                    break;

                case ext_ConnectMode.ext_cm_External:
                    break;

                case ext_ConnectMode.ext_cm_Solution:
                    break;

                case ext_ConnectMode.ext_cm_UISetup:
                    break;

                default:
                    break;
            }
  }

        /// <summary>
        /// 표준Toolbar에 버튼을 등록
        /// </summary>
        private void SetToolBar()
        {
            CommandBar stdCmdBar;
            CommandBarButton cmdBarBtn;
            object[] contextGUIDS = new object[] { };

            //커맨드가 등록되어 있지않다면 새로 등록
            if (ToolbarCommand == null)
            {
                ToolbarCommand = _applicationObject.Commands.AddNamedCommand(_addInInstance,
                  "ANewComment", "코멘트추가", "코멘트를 추가해줍니다.", true, 59, ref  contextGUIDS,
                      (int)vsCommandStatus.vsCommandStatusSupported 
                     | (int)vsCommandStatus.vsCommandStatusEnabled);
            }

            //표준툴바의 객체를 취득
            stdCmdBar =
            (Microsoft.VisualStudio.CommandBars.CommandBar)((Microsoft.VisualStudio.CommandBars.CommandBars)_applicationObject.CommandBars)["Standard"];

            //표준툴바에 버튼을 추가
            stdCmdBarCtl = (Microsoft.VisualStudio.CommandBars.CommandBarControl)ToolbarCommand.AddControl(stdCmdBar, stdCmdBar.Controls.Count + 1);

            //버튼에 캡션설정
            stdCmdBarCtl.Caption = "이거 누르면 코멘트가 추가됩니다.";

            //버튼을 아이콘으로 설정
            cmdBarBtn = (CommandBarButton)stdCmdBarCtl;
            cmdBarBtn.Style = MsoButtonStyle.msoButtonIcon;
        }


일단 이것만 하고 실행(F5)를 누르고 디버깅해주시면 아래 그림과 같이 툴바 제일끝에 스마일버튼이 추가된걸 보실수가 있습니다.



근데!!버튼을 누를수가 없네요.
IDTCommandTarget의 인터페이스메서드중 하나인 QueryStatus메서드에 아래와같은 코드를 입력해주세요.
빨간 부분은 프로젝트를 만들때 사용했던 추가기능의 이름을 넣어주세요.


  public void QueryStatus(string commandName, vsCommandStatusTextWanted neededText, ref vsCommandStatus status, ref object commandText)
  {
   if(neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
   {

                //커맨드명과 현재 활성화된 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄
                if (commandName == "MyTestAddin1.Connect.ANewComment" && _applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
                 {
                    status = (vsCommandStatus) vsCommandStatus.vsCommandStatusEnabled | vsCommandStatus.vsCommandStatusSupported;
                    return;
                 }

   }
  }

QueryStatus메서드는 VS가 자신의 상태가 변하면 각 커맨드들에 사용가능한 상태인지 요청하게 됩니다.
QueryStatus메서드에서 현재 VS의 상황을 파악하여 사용가능여부를 반환합니다.
예를들어 위의 코드에서는 '커맨드명과 현재 활성화된 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄'이 상황이 됩니다.

제가 현재 열려진 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄이란 조건을 설정한 이유는 스타트페이지가 열려진 상태에서 버튼이 눌러지게 되면 코멘트를 넣을곳이 없기때문에 에러를 발생시키기 때문이죠..
물론 코멘트를 넣어줄때 체크를 하면되지만 유저인터페이스를 고려해서 쓸수 없는 상황에는 아예 안눌려지게 하기위함입니다..
(위의 조건도 완벽한 상태가 아닙니다.실은 vsWindowTypeDocument라는건 파일의 종류와 상관없이 편집가능한 문서-소스코드,HTML,CSS,XML등 모든 문서-를 의미합니다.)



자 이제 마지막으로 버튼을 눌렀을때 문서에 코멘트를 넣는 코드를 추가해보겠습니다.
IDTCommandTarget의 인터페이스메서드중 하나인 Exec메서드에 아래와같은 코드를 입력해주세요.

  public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
  {

   handled = false;
   if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
   {
                switch (commandName) //스위치를 사용하여 불려진 커맨드를 체크.(혹시 하나의 추가기능에 버튼이 여러개 있을수도 있으니까 스위치를 사용합니다.)
                {
                    case "MyTestAddin1.Connect.ANewComment":
                        //현재 열려진 창이 문서인지 재확인을 하고
                        if (_applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
                        {
                            //열려진 문서의 인스턴스를 취득해서
                            TextDocument textDoc = (TextDocument) _applicationObject.ActiveWindow.Document.Object("TextDocument");
                            textDoc.StartPoint.CreateEditPoint(); //커서위치를 가져오고
  
                            //커맨드를 삽입하고
                            textDoc.Selection.Insert(string.Format("//{0}에 입력되었습니다.",DateTime.Now.ToString()), 0); 

                            //보기좋게 하기위해 개행문자를 넣어줌...
                            textDoc.Selection.EndOfLine(true);
                            textDoc.Selection.NewLine(1);

                            handled = true;
                        }
                        return;

                    default:
                        break;
                }
   }


}


자!!! 이제 다 만들어졌습니다.
다시 실행버튼을 누르시고 대충 아무 cs파일을 여시고.. 파일을 여시면 버튼이 활성화되는걸 보실수 있을겁니다.
그리고 버튼을 누르시면 아래처럼 자동으로 코멘트가 들어가 있을겁니다.



일단 오늘 시간이 좀 늦었으니 담번에 IDTExtensibility2와 IDTCommandTarget에 대해서랑 어떻게 추가기능을 배포할것인지를 정리하도록 하겠습니다..-.-;;


내용 추가
아래 소스코드도 IDTExtensibility2의 OnDisconnection메서드에 집어넣어주세요. 아래의 소스코드는 추가기능이 언로드될때 커맨드와 버튼을 삭제해줄때 사용합니다.이걸 집어넣지 않으면 추가기능을 활성화, 비활성화할때 에러를 발생시킬수 있거든요..^^;
깜박하고 빼먹었습니다..

  public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
  {

            //추가기능이 언로드될 등록한 버튼과 커맨드를 삭제
            try
            {
                if (disconnectMode == ext_DisconnectMode.ext_dm_UserClosed)
                {
                    if (stdCmdBarCtl != null)
                    {
                        stdCmdBarCtl.Delete(null);
                        stdCmdBarCtl = null;

                        ToolbarCommand.Delete();
                        ToolbarCommand = null;
                    }

                    if (MenuToolCommand != null)
                    {
                        MenuToolCommand.Delete();
                        MenuToolCommand = null;
                    }
                }
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.ToString());
            }
  }

저작자 표시 비영리 변경 금지
Trackback 0 Comment 0
2009/02/11 23:47

Visual Studio추가기능(Add-In) 만들기 - Part1

저도 추가기능은 제대로된걸 만들어본적이 없어서 깊게 파고 들수는 없지만 대략적인 지식을 비망록으로써 남겨보려합니다.
Visual Studio에는 3가지 방법으로 개발환경을 커스터마이징할수 있습니다.

매크로
   매크로는 흔히 이용하는 오피스의 매크로와 동일하다고 보시면 됩니다.
   사용자의 액션을 레코딩하여 반복작업을 간단하게 해줄수도 있고 컴파일이 필요없기 때문에 쉽게 편집할수도 있습니다.
   다만 Visual Basic으로만 저장이 가능하고 소스코드가 그대로 저장되어서 배포할때도 소스코드가 배포되니
   통합된 프로젝트에서는 관리하기가 불편하죠.

Add-In
   하나의 어플리케이션형태로 개발되고 배포또한 인스톨러형식으로 배포가능하고 매크로보다 강력합니다.
   매크로는 사용자의 명령을 소스코드가 대신해주는 기능뿐이지만 Add-In은 하나의 어플리케이션처럼
   VS랑 상호작용하니 가능한 작업도 많아집니다.
   
Visual Studio SDK
   이건 저도 사용해본적이 없어서 많은 설명을 드릴수는 없지만 Visual Studio SDK를 사용하면
   VS를 근본부터 제어할수 있습니다. DevParter라든지 각종 서드파티의 개발지원툴들은 이것을 이용하여 개발되었다고
   보시면 됩니다.WF나 WCF의 디자이너또한 마찬가지이고요..
  

3파트 정도로 나뉘어서 간단하게 툴바에 버튼을 하나 추가하여 버튼을 누르면 소스코드에 코멘트를
자동으로 입력해주는 기능을 만들어보도록 하겠습니다.

일단 오늘은 VS가 제공하는 템플릿을 사용하여 기본틀만 만들어보죠.

1. 새 프로젝트를 클릭하셔서 "기타 프로젝트형식" -> "확장성" -> "Visual Studio 추가기능" 순으로 클릭해주세요.
그리고 적당한 이름을 넣으시고 "확인을 눌러주세요.
참고로 옆에 보이는 "공유추가기능"이란건 오피스등에서 사용할수 있는 추가기능을 말합니다.


2. 그럼 위저드가 실행되어 언어를 선택하는 화면이 나옵니다.여기서는 C#을 선택합니다.


3. 그후에는 어떤 형식으로 추가기능을 사용할건지가 나오는데요. Macros를 제외한걸 선택합니다.
(실은 Macros를 선택한것과 안한것이 머가 틀린지는 저도 모르겠습니다...-.-..다만 추가기능의 정의XML에 호스팅되는 환경으로 매크로가 추가될뿐...)



4.그리고 이름과 설명을 대충입력해주시고요...



5. 아래와 같이 체크복스를 체크합니다.
가볍게 설명을 하자면 "도구"메뉴항목을 만듭니다..라는 내용은 VS상단메뉴의 "도구"에 지금 만드는 추가기능의
기본명령을 추가해주는 소스코드를 자동으로 만들어줍니다.
다음으로 호스트 응용프로그램이 시작될때 로드합니다.라는 내용은 추가기능의 정의XML에 옵션설정을 해주어서
별도의 유저액션없이 추가기능을 로드해줍니다.
마지막의 모달UI를 표시하지 않으며...라는 내용은 MSDN에는 추가 기능에 모달 UI(사용자 인터페이스)를 사용하지 않도록 하여 명령줄 빌드에서 안전하게 사용할 수 있도록 할지 여부라고 나오는데 당췌 먼말인지 모르겠습니다..-.-

6. 상단 메뉴의 "도움말" -> "Visual Studio 정보"라는 메뉴를 클릭했을때 나오는 일반적은 정보화면에 추가기능의 정보를 표시할지를 선택합니다. 대충 입력하시고 다음을 눌러주세요..




7. 그럼 프로젝트가 작성되어지고 다음의 소스코드들이 들어가 있을겁니다.


이걸로 템플릿을 사용하여 아무것도 없는 소스코드까지만 만들었습니다.
하지만 다음 내용을 위해 하나 해둬야 할게 있습니다.
현재 Connect는 IDTExtensibility2라는 인터페이스만을 구현하고 있는데 이건 추가기능으로써 필요한 인터페이스입니다.
저희는 도구모음을 버튼을 추가해야하니 IDTCommandTarget라는 인터페이스도 구현해야합니다.
IDTCommandTarget라는 텍스트를 추가하시고 아래그림과 같이 메서드스터브를 자동으로 만들어 주세요.
IDTExtensibility2과 IDTCommandTarget에 대한 설명을 다음 내용에서 설명하도록 하겠습니다.
Trackback 0 Comment 0
2008/04/01 14:12

VS Extensions 1.1인스톨후에 1.0에서 작성한 프로젝트를 인식못하는 문제..Vs Extensions 1.1のインストール後、1.0で作成したプロジェクトを認識できない。

음...왠지 제대로 인식을 못하는군요...

해결방법은 1.0을 지우지않으면 1.1을 인스톨이 안되지만...
1.1을 인스톨한후에는 1.0을 재인스톨가능합니다.
둘다 동시에 깔고 1.0에서 작성한 프로젝트는 1.0에서 돌리믄 됩니다..

----------------------------------------
1.0で作成したプロジェクトは1.1に自動では移行ができないようです。!!
1.0をアンインストールしないと1.1をインストールできないですが、
1.1を入れてからは1.0をインストールしようとしても怒られません。
で。。。結局、1.1と1.0の両立。。
今のところは問題ないです。

Trackback 0 Comment 0
2008/04/01 13:56

Visual Studio 2005 Extensions, Windows SharePoint Services 3.0버전 1.1

1.1이 되어서야 한글화가 되다니...-0-

http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=3e1dcccd-1cca-433a-bb4d-97b96bf7ab63



Sharepoint개발을 할때 상당히 유용한 도구입니다.
솔루션 파일의 자동생성기능, 각종 템플릿 제공(리스트,이벤트리시버,커스텀필드등등), 디버깅제공

1.0보다는 좋아진거 같은데 1.0이 좋았던것도 있었던듯...

게다가 문제는 1.0에서 만든게 1.1로 컨버팅이 안된다...킁...-0-

Trackback 0 Comment 0
2007/12/30 15:18

VS2008 고마운 신기능

VS2008에는 LINQ라든지 WPF라든지 최신 기술도 도입되지만 우리들의 작업을 그림자속에서 지원해주는 기능도 몇가지 추가가 됩니다.

그중에 맘에 드는 기능 몇개를 골라봅니다.



IntelliSense의 반투명 표시 기능.
사용자 삽입 이미지



















보통 이런식으로 후보코드가 표시되는되요..
그럼 아래줄의 코드가 가려져서 인텔리센스를 닫고 코드를 확인하고 다시 열어봐야 하는 경우가 많았습니다.
2008에서는 위의 상태에서 Ctrl키를 누르면
사용자 삽입 이미지




















보이시나요? 인텔리센스의 팝업?이 투명해져서 뒷부분이 보이는것을..
작지만 편리한 기능입니다.


자바스크립트 디버깅기능
웹 어플리케이션을 개발할때면 언제나 격는 고통이지만...
자바스크립트 디버깅이 안되는 것이 상당히 불편했죠..alert함수를 사용해서 변수를 확인한다든지...
그런 불편함을 한방에 해결해주는 기능이 도입되었습니다.
사용자 삽입 이미지




























브레이크포인트도 걸수 있고 코드비하인드부분을 디버깅하는것과 동일한 기능을 제공합니다.


Trackback 0 Comment 0
2007/12/10 11:27

진정한 웹다중Tier개발의 시작? VOLTA플랫폼

사용자 삽입 이미지






플랫폼이라고 해야할지 기술이라고 해야할지 잘모르겠지만
 (클라이언트입장에서는 플랫폼, 서버입장에서는 기술?이랄까)
MS에서 새로운 아이디어를 내놓았습니다.

일반적으로 M-Tier라고 하면 데이터-> 서버 -> 클라이언트의 3개이상의 물리적 플랫폼에서
데이터로직, 비지니스로직, 프레젠테이션로직을 구현하는것을 말하는데
진정한 M-Tier를 구현하기위해서는 클라이언트 어플리케이션을 독립실행하는 형태로 개발해야하죠.

최근에는 워낙 웹이 발달하게되어서 Javascript라든지 스마트클라이언트라든지 Ajax를 최대한 활용하는 방식으로 M-Tier의 프레젠테이션계층을 개발하는것이 주류가 되었죠.

하지만 웹브라우저에서 Rich한 UI를 개발하기 위해서는 굉장히 많은 노력이 필요합니다.
그 노력의 대부분이 별거아닌 UI를 제어하기위해 많은 양의 Javascript를 사용해야 하거나
비지니스로직계층과의 통신을 위해서 낭비하게 되죠.

원인은 웹브라우저상에서는 실질적으로 자바스크립트만이 유일한 프로그래밍 방법이죠.
다른 모든 계층은 스크립트언어가 아닌 프로그래밍언어를 사용하는데 말이죠..
자바스크립트가 나쁘다는게 아니라 개발시에 많은 오버헤드를 발생시킵니다.
설계,디버깅, 테스트등 많은 단계에서요..

또한 중요한것은 어떤 로직을 서버에두고 어떤 로직을 클라이언트에 둘까 하는 문제점입니다.
MS에서 Volta라는 새로운 개발툴을 내놓았습니다. MSIL로 작성된 DLL을 웹브라우저에서 로딩하여 자바스크립트를 대신하여 브라우저 제어할수 있는 기술입니다.(DLL을 랩핑해서 자바스크립트로 변환하는건가????)
좀더 거시적으로 말하자면 프레젠테이션층의 코드를 친숙한 C#이나 VB에서 개발한후에 동적으로 서버에서 실행할지 클라이언트에서 실행할지를 결정지을수 있죠.

기사와 공식사이트의 URL을 올려놓으니 흥미있으신분들은 방문해보시길...

기사 - >http://www.zdnet.co.kr/news/enterprise/dev/0,39031103,39164019,00.htm

공식사이트 - > http://labs.live.com/volta/


개인적인 감상으로는 아이디어는 좋은데...새로운 패러다임이라고는 할수 없음...기존의 기술의 극대활용이랄까...
차라리 XAML이 더 신선한 듯한....
근본적인 문제는 자바스크립트를 쓰려고 하기때문이란 말이다...-.-
Trackback 0 Comment 0
2007/06/12 13:29

WindowsClient.net 오픈

윈도우 클라이언트 개발자들의 커뮤니티가 저번달?에 오픈했습니다.
asp.net개발자들의 커뮤니티인 http://asp.net 과 자매사이트입니다.

http://windowsclient.net/


Trackback 0 Comment 0
2007/05/11 16:05

내가 만든 DLL 참조추가할때 리스트에 표시하기

개발하다보면 기존에 개발된 DLL을 참조하는 경우가 많습니다.
공용라이브러리같은게 그 대상이 되곤하죠. 보통 아키텍쳐팀이나 개발표준팀에서 라이브러리를 만들어서 제공하게 되는데 MSI등을 사용해서 개발자의 PC에 인스톨하게 됩니다.

하지만 GAC에 등록을 해도 Visual studio의 참조추가에서는 추가한 DLL이 표시되지 않는데요..
그럼 파일을 찾아서 수동으로 추가해야합니다.상당히 귀찮은 작업입니다.

다행히도 간단한 방법으로 비주얼 스튜디오의 리스트에 추가하는것이 가능합니다.

바로 레지스트리에 등록해주는건데요.
아래의 레지스트리에 정보를 입력해주면 됩니다.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx  -> .Net 2.0 (VS2005)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders -> .Net 1.1 (VS2003)


인스톨러 제작시에 추가해주면 아주 편리하죠...ㅎ

Trackback 0 Comment 2