Question: I am trying to develop a VSIX package that adds a tab to the project designer for a couple of custom project properties. I have the package working in VS 2013 using `CfgPropertyPagesGuidsAddCSharp` as described in [this post](http://hmemcpy.com/2015/03/adding-a-custom-property-page-to-existing-project-types-in-visual-studio/). However, after porting the VSIX project to VS 2010, the custom property page is not loaded.

[This question](https://stackoverflow.com/questions/6899219/adding-a-property-page-to-project-properties-without-implementing-a-project-subt) from 2011 doesn't have an answer. The answer to [another question](https://stackoverflow.com/questions/5324977/how-do-i-extend-the-project-properties-screen-in-visual-studio) suggests creating a custom project subtype, but that seems like an awful amount of work just to be able to edit some additional project properties from the GUI. This is my first time working on a VSIX package, so I'm trying to keep things as simple as possible.

I've tried browsing through the source for the [.NET project system](https://github.com/dotnet/project-system), but I'm not sure exactly what I'd be looking for to properly register the page; any guidance would be much appreciated.

Thanks.

Answer: 
Based on new information, I'll submit this answer:

My gut feeling is that you can't do this in one simple query. This sounds cludgy, but I think you're going to need one query created that's a SELECT DISTINCT query, and that query will pull one record for each employee:

```
Select DISTINCT Column1 from tableA

```

Call this query something like qryEmployees

Next you're going to need to create a new table. Call it tblQualifications. It will contain 2 fields; EName and EQualifications. We're going to fill that in a minute.

Next you're going to need to loop through each record in qryEmployees and write the employee name and their qualifications into tblQualifications.

```
'Run through every Employee name
Do While qryEmployees.EOF = False
  'Set up a temp variable, MyQual, and set it equal to Empty
  MyQual = ""
  'Pull all qualifications from TableA for the current Employee
  Set rec = db.OpenRecordset ("Select Column1, column2 from TableA WHERE Column1 = '" & qryEmployees.Column1 & "'")
  'Looping through the qualifications
  Do While rec.EOF = False
    'Add the qualification to the MyQual string
    MyQual = MyQual & rec("Column2") & ", "
    rec.MoveNext
  Loop

  'Now that we have all the qualifications in a string, trim off the last ", "
  MyQual = left(MyQual, len(MyQual)-2)

  'Open up tblQualifications and fill it with the Employee and a string of all of their qualifications
  tblQualifications.AddNew
    tblQualifications(0) = qryEmployees.Column1
    tblQualifications(1) = MyQual
  tblQualifications.Update

'Move on to the next Employee and repeat the process
qryEmployees.MoveNext
Loop

```

Now you have one table with Employee Name in one field, and all of his qualifications in the next. If you use the LIKE operator on this table, you should get your results.

```
Select * from tblQualifications
where tblQualifications.EName = myvalue1
and (tblQualifications.EQualifications LIKE myvalue2
and tblQualifications.EQualifications LIKE myvalue3)

```

It's not pretty, but it will work (with a little putzing with the code above, as I'm writing it off the top of my head and it's untested).
Thanks Johnny, your suggestion inspired me to write a slightly different approach to the solution.

I swapped the 'AND' to an 'OR' as others have suggested to extract any employee into a table if they have any of the qualifications.

The result is a table with every required qualification for every employee who has one of those qualifications.

I then did a count elsewhere of the number of qualifications required for the assignment and compared this to whether or not the employee had the required number of qualifications, as follows:

```
    Dim objSearchTable As DataTable = DSSearch.Tables("Employees")

    Dim i As Integer

    If QualificationsCount > 0 Then

        For i = 0 To objSearchTable.rows.count - 1

            strEmployee = objSearchTable.Rows(i).Item("column1")

            Dim foundRows As DataRow() = objSearchTable.[Select]("column1 = '" & strEmployee & "'")

            Dim numberOfRecords As Integer = foundRows.count

            If numberOfRecords < QualificationsCount Then

                objSearchTable.Rows(i).Delete

            End If

        Next

    End If

    objSearchTable.AcceptChanges

```

This deletes every instance of an employee from the table if the count of qualifications is less than the number required.

The solution isn't as elegant as extracting only the correct employees from the database to begin with.

There is also an overhead on extracting every employee from the database, but the end result is a table with just one row for each employee with all the qualifications, which does what I need.