private Version GetEntityFrameworkVersion(DbContextPackage package, Project project) { var vsProject = (VSLangProj.VSProject)project.Object; var entityFrameworkReference = vsProject.References.Cast <VSLangProj.Reference>().FirstOrDefault(r => r.Name == "EntityFramework"); if (entityFrameworkReference == null) { // Add EF References package.LogInfo(Strings.ReverseEngineer_InstallEntityFramework); try { project.InstallPackage("EntityFramework"); } catch (Exception ex) { entityFrameworkReference = vsProject.References.Cast <VSLangProj.Reference>().FirstOrDefault(r => r.Name == "EntityFramework"); if (entityFrameworkReference == null) { package.LogError(Strings.ReverseEngineer_InstallEntityFrameworkError, ex); throw new Exception("安装EF出错!"); } } } return(new Version(entityFrameworkReference.Version)); }
private void OptimizeContextCore( LanguageOption languageOption, string baseFileName, SelectedItem selectedItem, Action <string> generateAction) { DebugCheck.NotEmpty(baseFileName); var progressTimer = new Timer { Interval = 1000 }; try { var selectedItemPath = (string)selectedItem.ProjectItem.Properties.Item("FullPath").Value; var viewsFileName = baseFileName + ".Views" + ((languageOption == LanguageOption.GenerateCSharpCode) ? FileExtensions.CSharp : FileExtensions.VisualBasic); var viewsPath = Path.Combine( Path.GetDirectoryName(selectedItemPath), viewsFileName); _package.DTE2.SourceControl.CheckOutItemIfNeeded(viewsPath); var progress = 1; progressTimer.Tick += (sender, e) => { _package.DTE2.StatusBar.Progress(true, string.Empty, progress, 100); progress = progress == 100 ? 1 : progress + 1; _package.LogInfo(Strings.Optimize_Begin(baseFileName)); }; progressTimer.Start(); Task.Factory.StartNew( () => { generateAction(viewsPath); }) .ContinueWith( t => { progressTimer.Stop(); _package.DTE2.StatusBar.Progress(false); if (t.IsFaulted) { _package.LogError(Strings.Optimize_Error(baseFileName), t.Exception); return; } selectedItem.ProjectItem.ContainingProject.ProjectItems.AddFromFile(viewsPath); _package.DTE2.ItemOperations.OpenFile(viewsPath); _package.LogInfo(Strings.Optimize_End(baseFileName, Path.GetFileName(viewsPath))); }, TaskScheduler.FromCurrentSynchronizationContext()); } catch { progressTimer.Stop(); _package.DTE2.StatusBar.Progress(false); throw; } }