/// <summary> /// Rather than directly creating the project, ask VS to initate the process of /// creating an aggregated project in case we are flavored. We will be called /// on the IVsAggregatableProjectFactory to do the real project creation. /// </summary> /// <param name="fileName">Project file</param> /// <param name="location">Path of the project</param> /// <param name="name">Project Name</param> /// <param name="flags">Creation flags</param> /// <param name="projectGuid">Guid of the project</param> /// <param name="project">Project that end up being created by this method</param> /// <param name="canceled">Was the project creation canceled</param> protected override void CreateProject(string fileName, string location, string name, uint flags, ref Guid projectGuid, out IntPtr project, out int canceled) { project = IntPtr.Zero; canceled = 0; // Get the list of GUIDs from the project/template string guidsList = this.ProjectTypeGuids(fileName); // Launch the aggregate creation process (we should be called back on our IVsAggregatableProjectFactoryCorrected implementation) IVsCreateAggregateProject aggregateProjectFactory = (IVsCreateAggregateProject)this.Site.GetService(typeof(SVsCreateAggregateProject)); int hr = aggregateProjectFactory.CreateAggregateProject(guidsList, fileName, location, name, flags, ref projectGuid, out project); if (hr == VSConstants.E_ABORT) { canceled = 1; } ErrorHandler.ThrowOnFailure(hr); // This needs to be done after the aggregation is completed (to avoid creating a non-aggregated CCW) and as a result we have to go through the interface IProjectEventsProvider eventsProvider = (IProjectEventsProvider)Marshal.GetTypedObjectForIUnknown(project, typeof(IProjectEventsProvider)); eventsProvider.ProjectEventsProvider = this.GetProjectEventsProvider(); this.buildProject = null; }
public void SetNullSource() { ProjectTestClass project = new ProjectTestClass(new ProjectTestPackage()); IProjectEventsProvider eventProvider = project as IProjectEventsProvider; Assert.IsNotNull(eventProvider, "Project class does not implements IProjectEventsProvider."); eventProvider.ProjectEventsProvider = null; project.Close(); }
public void SetOpenStatusTest() { using (ProjectEventsSource eventSource = new ProjectEventsSource()) { ProjectTestClass project = new ProjectTestClass(new ProjectTestPackage()); IProjectEventsProvider eventProvider = project as IProjectEventsProvider; Assert.IsNotNull(eventProvider, "Project class does not implements IProjectEventsProvider."); Assert.IsFalse(IsProjectOpened(project), "Project is opened right after its creation."); eventProvider.ProjectEventsProvider = eventSource; eventSource.SignalOpenStatus(true); Assert.IsTrue(IsProjectOpened(project), "Project is not opened after the AfterProjectFileOpened is signaled."); project.Close(); } }
public void SetMultipleSource() { using (ProjectEventsSource firstSource = new ProjectEventsSource()) { using (ProjectEventsSource secondSource = new ProjectEventsSource()) { ProjectTestClass project = new ProjectTestClass(new ProjectTestPackage()); IProjectEventsProvider eventProvider = project as IProjectEventsProvider; Assert.IsNotNull(eventProvider, "Project class does not implements IProjectEventsProvider."); eventProvider.ProjectEventsProvider = firstSource; eventProvider.ProjectEventsProvider = secondSource; Assert.IsFalse(IsProjectOpened(project)); firstSource.SignalOpenStatus(true); Assert.IsFalse(IsProjectOpened(project)); secondSource.SignalOpenStatus(true); Assert.IsTrue(IsProjectOpened(project)); project.Close(); } } }