public static IProject Create(Project project, OutputWindow outputWindow)
 {
    if (project.IsCSharp())
    {
       return new CSharpProject((VSProject)project.Object, outputWindow);
    }
    else if (project.IsCpp())
    {
       return new VcppProject((VCProject)project.Object, outputWindow);
    }
    throw new ArgumentOutOfRangeException("Project kind '" + project.Kind + "' not supported. Only C# (csproj) and C++ (vcxproj) are supported.");
 }
      /// <summary>
      /// Initialization of the package; this method is called right after the package is sited, so this is the place where you can put all the initialization code that rely on services provided by VisualStudio.
      /// </summary>
      protected override void Initialize()
      {
         Debug.WriteLine("Entering Initialize() of: " + ToString());
         base.Initialize();

         // Add our command handlers for menu (commands must exist in the .vsct file)
         var menuCommandService = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
         if (null != menuCommandService)
         {
            // Create the command for the menu item.
            CommandID menuCommandID = new CommandID(GuidList.guidTEAM_ProjectMergerCmdSet, (int)PkgCmdIDList.teamMergeProjects);
            MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID);
            menuCommandService.AddCommand(menuItem);
         }

         OutputWindow = OutputWindow.Create(GetService(typeof(SVsOutputWindow)) as IVsOutputWindow);
         Shell = new Shell((IVsUIShell)GetService(typeof(SVsUIShell)));
         MonitorSelection = new MonitorSelection(((IVsMonitorSelection)Package.GetGlobalService(typeof(SVsShellMonitorSelection))));
         Solution = new Solution((IVsSolution)GetService(typeof(IVsSolution)));
         Dte = (DTE)GetService(typeof(DTE));
      }
 public VcppProject(VCProject vcProject, OutputWindow outputWindow)
 {
    VcProject = vcProject;
    OutputWindow = outputWindow;
 }
 public CSharpProject(VSProject vsProject, OutputWindow outputWindow)
 {
    VsProject = vsProject;
    OutputWindow = outputWindow;
 }