속성 페이지 추가 및 제거
프로젝트 디자이너는 Visual Studio에서 프로젝트 속성, 설정 및 리소스를 관리할 수 있는 중앙 집중화된 위치를 제공합니다. Visual Studio IDE(통합 개발 환경)에서 단일 창으로 표시되며 왼쪽에 있는 탭을 통해 액세스할 수 있는 여러 창이 오른쪽에 포함되어 있습니다. 프로젝트 디자이너의 창(속성 페이지라고도 함)은 프로젝트 형식 및 언어에 따라 다릅니다. 프로젝트 디자이너는 프로젝트 메뉴의 속성 명령으로 액세스할 수 있습니다.
프로젝트 하위 형식은 프로젝트 디자이너에서 추가 속성 페이지를 표시해야 하는 경우가 많습니다. 마찬가지로 일부 프로젝트 하위 형식에서는 기본 제공 속성 페이지를 제거해야 할 수 있습니다. 둘 중 하나를 수행하려면 프로젝트 하위 형식이 IVsHierarchy 인터페이스를 구현하고 GetProperty 메서드를 재정의해야 합니다. 이 메서드를 재정의하고 __VSHPROPID2 열거형 값 중 하나를 포함하는 propId
매개 변수를 사용하여 프로젝트 속성을 필터링, 추가 또는 제거할 수 있습니다. 예를 들어 구성 종속 속성 페이지에 페이지를 추가해야 할 수 있습니다. 이 작업을 수행하려면 구성 종속 속성 페이지를 필터링한 다음, 기존 목록에 새 페이지를 추가해야 합니다.
프로젝트 디자이너에서 속성 페이지 추가 및 제거
속성 페이지 제거
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); }
가져온
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;
속성 페이지 추가
추가할 속성 페이지를 만듭니다.
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; } }
새 속성 페이지를 등록합니다.
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); }