연습: 프로젝트가 로드될 때 트리거되는 간단한 프로젝트 기능 만들기

업데이트: 2010년 7월

프로젝트 관련 작업이 발생할 때 사용자 지정 작업을 수행하는 프로젝트 기능을 만들 수 있습니다. 이 연습에서는 데이터베이스 프로젝트가 로드될 때 대화 상자를 표시하는 SampleProjectFeature라는 프로젝트 기능을 만듭니다. 이 샘플을 수정하여 데이터베이스 프로젝트가 로드될 때 특정 작업을 수행할 수 있습니다.

이 연습에서는 다음 주요 작업을 수행합니다.

  • Visual Studio 패키지 만들기

  • 프로젝트 기능 정의

  • 프로젝트 기능 테스트

사전 요구 사항

이 연습을 완료하려면 다음 구성 요소가 필요합니다.

  • Visual Studio 2010 Professional, Visual Studio 2010 Premium 또는 Visual Studio 2010 Ultimate가 설치되어 있어야 합니다.

  • 데이터베이스 프로젝트가 있어야 합니다.

  • 또한 Visual Studio 2010 SDK가 컴퓨터에 설치되어 있어야 합니다. 이 키트는 Microsoft 웹 사이트의 Visual Studio 2010 SDK 페이지에서 다운로드할 수 있습니다.

참고

이 연습은 Visual Studio의 데이터베이스 기능에 이미 친숙한 사용자를 위한 것입니다. 사용자는 클래스 라이브러리를 만드는 방법, 코드 편집기를 사용하여 클래스에 코드를 추가하는 방법 등과 같은 기본 Visual Studio 개념도 알고 있어야 합니다.

Visual Studio 패키지 만들기

Visual Studio 통합 패키지 마법사를 시작하려면

  1. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.

  2. 설치된 템플릿 목록에서 기타 프로젝트 형식 노드를 확장하고 확장성 노드를 클릭합니다.

  3. 세부 정보 창에서 Visual Studio패키지를 클릭합니다.

    중요

    Visual Studio 2010 SDK를 설치하지 않은 경우에는 Visual Studio 통합 패키지 프로젝트 형식을 사용할 수 없습니다.

  4. 이름에 SampleProjectFeature를 입력합니다.

  5. 확인을 클릭합니다.

    Visual Studio 통합 패키지 마법사가 나타납니다.

    다음에는 이 마법사를 사용하여 만들려는 프로젝트를 구성합니다.

Visual Studio 통합 패키지 마법사를 사용하여 프로젝트를 만들려면

  1. 다음을 클릭합니다.

  2. 언어 선택에서 **Visual C#**을 클릭합니다.

    참고

    Visual Basic 또는 Visual C++를 사용하여 패키지를 만들 수도 있습니다. 이 연습에서는 Visual Basic 및 Visual C#의 샘플 코드만 보여 줍니다.

  3. Obtain keys for assembly signing에서 Generate a new key file to sign the assembly를 클릭합니다.

  4. 다음을 클릭합니다.

  5. Company name에 MyCompany를 입력합니다.

  6. VSPackage name에 SampleProjectFeature를 입력합니다.

  7. (선택 사항) 특정 버전 번호를 지정할 수 있습니다.

  8. (선택 사항) 패키지에 사용되는 아이콘을 사용자 지정할 수 있습니다.

  9. (선택 사항) Detailed Information에서 패키지에 대한 추가 정보를 제공할 수 있습니다.

  10. 다음을 클릭합니다.

  11. Menu Command 확인란을 선택합니다.

  12. Tool WindowCustom Editor 확인란의 선택이 취소되어 있는지 확인합니다.

  13. 다음을 클릭합니다.

  14. Command Name에 Toggle Project Loaded Dialogs를 입력합니다.

  15. Command ID에 cmdidEnableDialogs를 입력합니다.

  16. 다음을 클릭합니다.

  17. Integration Test ProjectUnit Test Project 확인란의 선택을 취소합니다.

    참고

    조직에서 사용할 실제 패키지를 만드는 경우에는 패키지용 테스트를 만들어 패키지가 올바르게 작동하는지 확인해야 합니다.

  18. 마침을 클릭합니다.

    Visual Studio 통합 패키지 프로젝트가 만들어져 솔루션 탐색기에 나타납니다.

    다음에는 패키지의 코드를 사용자 지정하여 데이터베이스 프로젝트 기능을 정의합니다.

프로젝트 기능 정의

패키지 정의를 수정하여 데이터베이스 프로젝트 기능을 정의하려면 패키지 정의를 업데이트한 다음 SampleProjectFeature 클래스를 추가해야 합니다.

패키지 정의를 업데이트하려면

  1. 솔루션 탐색기에서 SampleProjectFeaturePackage.cs를 두 번 클릭하여 코드 편집기에서 엽니다.

  2. 코드 편집기에서 MenuItemCallback 메서드를 찾습니다.

  3. 메서드 정의를 다음 코드로 바꿉니다.

            private void MenuItemCallback(object sender, EventArgs e)
            {
                SampleProjectFeature.EnableDialogs = !SampleProjectFeature.EnableDialogs;
            }
    

    참고

    SampleProjectFeature 클래스와 EnableDialogs 메서드를 아직 정의하지 않았기 때문에 오류 목록에 오류가 나타납니다.

  4. 파일 메뉴에서 SampleProjectFeaturePackage.cs 저장을 클릭합니다.

    다음에는 프로젝트 기능 클래스를 정의합니다.

SampleProjectFeature 클래스를 정의하려면

  1. 솔루션 탐색기에서 SampleProjectFeature 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 클래스를 클릭합니다.

    해당 클래스 템플릿이 강조 표시된 상태로 새 항목 추가 대화 상자가 나타납니다.

  2. 이름에 SampleProjectFeature.cs를 입력합니다.

  3. 추가를 클릭합니다.

    프로젝트에 새 클래스가 추가되고 코드 편집기가 나타나면서 해당 클래스 정의가 표시됩니다.

  4. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 참조 추가를 클릭합니다.

    참조 추가 대화 상자가 나타납니다.

  5. .NET 탭을 클릭합니다.

  6. 구성 요소 목록에서 다음 참조를 강조 표시하고 확인을 클릭합니다.

    • Microsoft.Data.Schema

    • Microsoft.VisualStudio.Data.Schema.Package

  7. 코드 편집기에서 클래스 정의에 다음 using 문을 추가합니다.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Data.Schema.Extensibility;
    using Microsoft.Data.Schema;
    using Microsoft.VisualStudio.Data.Schema.Package.Project;
    using Microsoft.VisualStudio.Shell.Interop;
    using System.Globalization;
    
  8. 클래스 정의를 수정하여 기본 클래스를 지정하고 이 기능이 호환되는 데이터베이스 스키마 공급자를 지정합니다. 이 연습의 예제는 모든 데이터베이스 스키마 공급자와 호환됩니다.

        [DatabaseSchemaProviderCompatibility(typeof(DatabaseSchemaProvider))]
        class SampleProjectFeature : IDatabaseProjectFeature
        {
        }
    

    주요 인터페이스, 형식 및 메서드는 DatabaseSchemaProviderCompatibilityAttribute, DatabaseSchemaProviderIDatabaseProjectFeature입니다.

  9. 클래스에 한 쌍의 속성을 추가하려면

            public static bool EnableDialogs { get; set; }
            private IDatabaseProjectNode ProjectNode { get; set; }
    

    첫 번째 속성은 이 프로젝트 기능을 설정하거나 해제할 수 있는 명령에서 사용됩니다. 중요한 인터페이스는 IDatabaseProjectNode입니다.

  10. 클래스에 다음 생성자를 추가합니다.

            static SampleProjectFeature()
            {
                EnableDialogs = true;
            }
    

    이 생성자는 EnableDialogs 속성을 초기화합니다.

  11. 클래스에 Initialize 메서드를 추가합니다.

            public void Initialize(IDatabaseProjectNode projectNode)
            {
                ProjectNode = projectNode;
    
                // Hook up to a few events
                ProjectNode.ProjectLoaded += delegate
                {
                    ShowDialog("In ProjectLoaded Event");
                };
            }
    

    Initialize 메서드는 기능이 적용될 프로젝트를 식별한 다음 ProjectLoaded 이벤트를 조사하기 위한 준비를 합니다.

  12. 마지막으로, 이 기능이 설정되어 있는 경우 ProjectLoaded 이벤트가 발생하면 대화 상자를 표시하는 ShowDialog 메서드를 추가합니다.

            void ShowDialog(string msg)
            {
                if (!SampleProjectFeature.EnableDialogs)
                    return;
    
                // Show a Message Box to indicate that we were here
                IVsUIShell uiShell = (IVsUIShell)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SVsUIShell));
                Guid clsid = Guid.Empty;
                int result;
                Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(
                           0,
                           ref clsid,
                           "Simple Project Feature",
                           msg,
                           string.Empty,
                           0,
                           OLEMSGBUTTON.OLEMSGBUTTON_OK,
                           OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
                           OLEMSGICON.OLEMSGICON_INFO,
                           0,        // false
                           out result));
            }
    

    사용자가 메뉴 명령을 사용하여 이 기능을 해제한 경우에는 이 메서드가 반환됩니다. 그렇지 않으면 이 메서드는 대화 상자를 표시합니다. 사용자 지정 프로젝트 기능에서 대화 상자를 표시하는 대신 추가 처리를 수행할 수도 있습니다.

  13. 파일 메뉴에서 SampleProjectFeature.cs 저장을 클릭합니다.

다음으로, 프로젝트를 빌드합니다.

프로젝트를 빌드하려면

  • 빌드 메뉴에서 솔루션 빌드를 클릭합니다.

다음으로, 프로젝트에서 생성된 버전, 문화권, PublicKeyToken 등의 어셈블리 정보를 수집합니다.

어셈블리 정보를 수집하려면

  1. 시작 메뉴를 열고 Microsoft Visual Studio 2010, Visual Studio Tools을 차례로 가리킨 다음 Visual Studio 명령 프롬프트(2010)를 클릭합니다.

  2. 빌드된 어셈블리(SampleProjectFeature.dll)가 있는 폴더로 이동합니다.

  3. 다음 명령줄을 입력합니다.

    SN.EXE -T SampleProjectFeature.dll

  4. 공개 키 토큰을 기록해 둡니다. 이 토큰은 다음 절차에서 사용됩니다.

다음에는 이전 절차에서 수집한 어셈블리 정보를 사용하여 XML 파일을 만듭니다.

XML 파일을 만들려면

  1. 솔루션 탐색기에서 SampleProjectFeature 프로젝트를 선택합니다.

  2. 프로젝트 메뉴에서 새 항목 추가를 선택합니다.

  3. 템플릿 창에서 XML 파일 항목을 찾아 선택합니다.

  4. 이름 텍스트 상자에 SampleProjectFeature.Extensions.xml을 입력한 다음 추가 단추를 클릭합니다.

    솔루션 탐색기의 프로젝트에 SampleProjectFeature.Extensions.xml 파일이 추가됩니다.

  5. SampleProjectFeature.Extensions.xml 파일을 열고 다음 XML과 일치하도록 업데이트합니다. 이전 절차에서 검색한 PublicKeyToken을 바꿉니다.

    <?xml version="1.0" encoding="utf-8"?>
    <extensions assembly=""
                version="1" xmlns="urn:Microsoft.Data.Schema.Extensions"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions Microsoft.Data.Schema.Extensions.xsd">
    
      <extension type=" MyCompany.SampleProjectFeature.SampleProjectFeature" assembly="SampleProjectFeature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/>
    </extensions>
    
  6. 파일 메뉴에서 저장을 클릭합니다.

다음으로 Extensions.xml 파일의 속성을 수정하여 vsixmanifest에 포함시킵니다.

SampleProductFeature.Extensions.xml을 vsixmanifest에 포함시키려면

  1. 솔루션 탐색기에서 SampleProjectFeature.Extensions.xml을 클릭합니다.

  2. 속성 창에서 빌드 작업 속성을 콘텐츠로 변경합니다.

  3. Include in VSIX 속성을 True로 변경합니다.

  4. 파일 메뉴에서 모두 저장을 클릭합니다.

  5. 빌드 메뉴에서 SampleProjectFeature 빌드를 클릭합니다.

    vsixmanifest 파일이 업데이트됩니다. 이제 프로젝트 기능을 테스트할 준비가 되었습니다.

프로젝트 기능 테스트

프로젝트 기능을 테스트하려면 먼저 프로젝트 기능을 빌드한 다음 F5 키를 눌러 Visual Studio의 실험 빌드를 시작합니다.

데이터베이스 프로젝트 기능을 빌드하고 테스트하려면

  1. 프로젝트 메뉴에서 빌드를 클릭합니다.

    프로젝트가 성공적으로 빌드되어야 합니다.

  2. F5 키를 눌러 패키지를 Visual Studio의 실험 빌드에서 실행합니다.

    실험 모드의 Visual Studio 인스턴스가 나타납니다. 도구 메뉴에 Toggle Project Loaded Dialogs 명령이 나타납니다.

  3. 파일 메뉴에서 열기를 가리킨 다음 프로젝트/솔루션을 클릭합니다.

  4. 열려는 데이터베이스 프로젝트(.dbproj)로 이동한 다음 열기를 클릭합니다.

    데이터베이스 프로젝트가 로드되면 "Simple Project Feature In ProjectLoaded Event"라는 메시지가 들어 있는 대화 상자가 나타납니다.

    이 시점에서 프로젝트 기능을 사용자 지정하여 다른 기능을 추가할 수 있습니다.

다음 단계

이 연습에서 만든 기능을 자신의 작업을 위한 시작 지점으로 복사하는 경우에는 다음을 수행해야 합니다.

  • 확장명에 고유한 이름을 지정합니다.

  • 확장명에 고유한 GUID를 지정합니다.

Visual Studio 통합 패키지 마법사를 사용하여 새 패키지를 만들면 새 GUID가 만들어집니다.

패키지를 일반 모드의 Visual Studio 인스턴스에서 사용하려면 먼저 패키지를 등록해야 합니다. VSPackage에 대한 자세한 내용은 다음을 참조하십시오.

참고 항목

작업

How to: Troubleshoot VSPackages

개념

Visual Studio의 데이터베이스 기능 확장

데이터베이스 및 서버 프로젝트 개요

기타 리소스

데이터베이스 프로젝트에 대한 사용자 지정 기능 만들기

변경 기록

날짜

변경 내용

이유

2010년 7월

Extensions.xml 파일을 약간 수정하여 고객이 인식한 문제를 해결합니다.

고객 의견