public int OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded) { // Only check this project if the solution is opened and we haven't already warned at the maximum level. Note that fAdded // is true for both add and a reload of an unloaded project if (_solutionOpened && fAdded == 1 && _compatibilityLevelWarnedForThisSolution != CompatibilityLevel.NotSupported) { UnconfiguredProject project = pHierarchy.AsUnconfiguredProject(); if (project != null) { _threadHandling.Value.JoinableTaskFactory.RunAsync(async() => { // Run on the background await TaskScheduler.Default; VersionCompatibilityData compatData = GetVersionCmpatibilityData(); // We need to check if this project has been newly created. Our projects will implement IProjectCreationState -we can // skip any that don't IProjectCreationState projectCreationState = project.Services.ExportProvider.GetExportedValueOrDefault <IProjectCreationState>(); if (projectCreationState != null && !projectCreationState.WasNewlyCreated) { CompatibilityLevel compatLevel = await GetProjectCompatibilityAsync(project, compatData).ConfigureAwait(false); if (compatLevel != CompatibilityLevel.Recommended) { await WarnUserOfIncompatibleProjectAsync(compatLevel, compatData).ConfigureAwait(false); } } }); } } return(VSConstants.S_OK); }
protected virtual bool IsNewlyCreated(UnconfiguredProject project) { IProjectCreationState projectCreationState = project.Services.ExportProvider.GetExportedValueOrDefault <IProjectCreationState>(); return(projectCreationState?.WasNewlyCreated ?? false); }