다음을 통해 공유


속성 페이지 추가 및 제거

프로젝트 디자이너는 Visual Studio에서 프로젝트 속성, 설정 및 리소스를 관리할 수 있는 중앙 집중화된 위치를 제공합니다. Visual Studio IDE(통합 개발 환경)에서 단일 창으로 표시되며 왼쪽에 있는 탭을 통해 액세스할 수 있는 여러 창이 오른쪽에 포함되어 있습니다. 프로젝트 디자이너의 창(속성 페이지라고도 함)은 프로젝트 형식 및 언어에 따라 다릅니다. 프로젝트 디자이너는 프로젝트 메뉴의 속성 명령으로 액세스할 수 있습니다.

프로젝트 하위 형식은 프로젝트 디자이너에서 추가 속성 페이지를 표시해야 하는 경우가 많습니다. 마찬가지로 일부 프로젝트 하위 형식에서는 기본 제공 속성 페이지를 제거해야 할 수 있습니다. 둘 중 하나를 수행하려면 프로젝트 하위 형식이 IVsHierarchy 인터페이스를 구현하고 GetProperty 메서드를 재정의해야 합니다. 이 메서드를 재정의하고 __VSHPROPID2 열거형 값 중 하나를 포함하는 propId 매개 변수를 사용하여 프로젝트 속성을 필터링, 추가 또는 제거할 수 있습니다. 예를 들어 구성 종속 속성 페이지에 페이지를 추가해야 할 수 있습니다. 이 작업을 수행하려면 구성 종속 속성 페이지를 필터링한 다음, 기존 목록에 새 페이지를 추가해야 합니다.

프로젝트 디자이너에서 속성 페이지 추가 및 제거

속성 페이지 제거

  1. GetProperty(uint itemId, int propId, out object property) 메서드를 재정의하여 속성 페이지를 필터링하고 clsids 목록을 가져옵니다.

    protected override int GetProperty(uint itemId, int propId, out object property)
    {
        //Use propId to filter configuration-independent property pages.
        switch (propId)
        {
            . . . .
    
            case (int)__VSHPROPID2.VSHPROPID_PropertyPagesCLSIDList:
                {
                    //Get a semicolon-delimited list of clsids of the configuration-independent property pages
                    ErrorHandler.ThrowOnFailure(base.GetProperty(itemId, propId, out property));
                    string propertyPagesList = ((string)property).ToUpper(CultureInfo.InvariantCulture);
                    //Remove the property page here
                    . . . .
                }
             . . . .
         }
            . . . .
        return base.GetProperty(itemId, propId, out property);
    }
    
  2. 가져온 clsids 목록에서 빌드 이벤트 페이지를 제거합니다.

    string buildEventsPageGuid = "{1E78F8DB-6C07-4D61-A18F-7514010ABD56}";
    int index = propertyPagesList.IndexOf(buildEventsPageGuid);
    if (index != -1)
    {
        // GUIDs are separated by ';' so if you remove the last GUID, also remove the last ';'
        int index2 = index + buildEventsPageGuid.Length + 1;
        if (index2 >= propertyPagesList.Length)
            propertyPagesList = propertyPagesList.Substring(0, index).TrimEnd(';');
        else
            propertyPagesList = propertyPagesList.Substring(0, index) + propertyPagesList.Substring(index2);
    }
    //New property value
    property = propertyPagesList;
    

속성 페이지 추가

  1. 추가할 속성 페이지를 만듭니다.

    class DeployPropertyPage : Form, Microsoft.VisualStudio.OLE.Interop.IPropertyPage
    {
        . . . .
        //Summary: Return a structure describing your property page.
        public void GetPageInfo(Microsoft.VisualStudio.OLE.Interop.PROPPAGEINFO[] pPageInfo)
        {
            PROPPAGEINFO info = new PROPPAGEINFO();
            info.cb = (uint)Marshal.SizeOf(typeof(PROPPAGEINFO));
            info.dwHelpContext = 0;
            info.pszDocString = null;
            info.pszHelpFile = null;
            info.pszTitle = "Deployment";  //Assign tab name
            info.SIZE.cx = this.Size.Width;
            info.SIZE.cy = this.Size.Height;
            if (pPageInfo != null && pPageInfo.Length > 0)
                pPageInfo[0] = info;
        }
    }
    
  2. 새 속성 페이지를 등록합니다.

    [MSVSIP.ProvideObject(typeof(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)]
    
  3. GetProperty(uint itemId, int propId, out object property) 메서드를 재정의하여 속성 페이지를 필터링하고 clsids 목록을 가져와 새 속성 페이지를 추가합니다.

    protected override int GetProperty(uint itemId, int propId, out object property)
    {
        //Use propId to filter configuration-dependent property pages.
        switch (propId)
        {
            . . . .
            case (int)__VSHPROPID2.VSHPROPID_CfgPropertyPagesCLSIDList:
                {
                    //Get a semicolon-delimited list of clsids of the configuration-dependent property pages.
                    ErrorHandler.ThrowOnFailure(base.GetProperty(itemId, propId, out property));
                    //Add the Deployment property page.
                    property += ';' + typeof(DeployPropertyPage).GUID.ToString("B");
                }
         }
            . . . .
        return base.GetProperty(itemId, propId, out property);
    }