public void Generate(string outputPath, Project project, GenerationType generationType) { try { if (string.IsNullOrEmpty(outputPath)) { throw new ArgumentException(outputPath, nameof(outputPath)); } if (project.Properties.Item("TargetFrameworkMoniker") == null) { EnvDteHelper.ShowError("The selected project type has no TargetFrameworkMoniker"); return; } if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework") && !project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2.0")) { EnvDteHelper.ShowError("Currently only .NET Framework and .NET Core 2.0 projects are supported - TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value); return; } bool isNetCore = project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2.0"); var processResult = _processLauncher.GetOutput(outputPath, isNetCore, generationType); if (processResult.StartsWith("Error:")) { throw new ArgumentException(processResult, nameof(processResult)); } switch (generationType) { case GenerationType.Dgml: GenerateDgml(processResult, project); Telemetry.TrackEvent("PowerTools.GenerateModelDgml"); break; case GenerationType.Ddl: GenerateFiles(processResult, project, ".sql"); Telemetry.TrackEvent("PowerTools.GenerateSqlCreate"); break; case GenerationType.DebugView: GenerateFiles(processResult, project, ".txt"); Telemetry.TrackEvent("PowerTools.GenerateDebugView"); break; default: break; } } catch (Exception exception) { _package.LogError(new List <string>(), exception); } }
public void Generate(string outputPath, Project project, bool generateDdl = false) { try { if (project.Properties.Item("TargetFrameworkMoniker") == null) { EnvDteHelper.ShowError("The selected project type has no TargetFrameworkMoniker"); return; } if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework") && !project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2.0")) { EnvDteHelper.ShowError("Currently only .NET Framework and .NET Core 2.0 projects are supported - TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value); return; } bool isNetCore = project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2.0"); var processResult = _processLauncher.GetOutput(outputPath, isNetCore, generateDdl); if (processResult.StartsWith("Error:")) { throw new ArgumentException(processResult); } if (generateDdl) { GenerateDatabaseScripts(processResult, project); Telemetry.TrackEvent("PowerTools.GenerateSqlCreate"); } else { GenerateDgml(processResult, project); Telemetry.TrackEvent("PowerTools.GenerateModelDgml"); } } catch (Exception exception) { _package.LogError(new List <string>(), exception); } }
public void ManageMigrations(string outputPath, Project project) { try { if (string.IsNullOrEmpty(outputPath)) { throw new ArgumentException(outputPath, nameof(outputPath)); } if (project.Properties.Item("TargetFrameworkMoniker") == null) { EnvDteHelper.ShowError("The selected project type has no TargetFrameworkMoniker"); return; } if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework") && !project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2.0")) { EnvDteHelper.ShowError("Currently only .NET Framework and .NET Core 2.0 projects are supported - TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value); return; } bool isNetCore = project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2."); //TODO 3 different actions from dialog var processResult = _processLauncher.GetOutput(outputPath, isNetCore, GenerationType.MigrationStatus, null, null); if (processResult.StartsWith("Error:")) { throw new ArgumentException(processResult, nameof(processResult)); } //TODO Show status somewhere? - Dialog/ToolWindow ? } catch (Exception exception) { _package.LogError(new List <string>(), exception); } }
public void Generate(string outputPath, Project project, GenerationType generationType) { try { if (string.IsNullOrEmpty(outputPath)) { throw new ArgumentException(outputPath, nameof(outputPath)); } if (project.Properties.Item("TargetFrameworkMoniker") == null) { EnvDteHelper.ShowError("The selected project type has no TargetFrameworkMoniker"); return; } if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework") && !project.IsNetCore()) { EnvDteHelper.ShowError("Currently only .NET Framework and .NET Core projects are supported - TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value); return; } if (project.IsNetCore()) { var result = project.ContainsEfCoreDesignReference(); if (string.IsNullOrEmpty(result.Item2)) { EnvDteHelper.ShowError("EF Core 2.1 or later not found in project"); return; } if (!result.Item1) { if (!Version.TryParse(result.Item2, out Version version)) { EnvDteHelper.ShowError($"Cannot support version {version}, notice that previews are not supported."); return; } var nugetHelper = new NuGetHelper(); nugetHelper.InstallPackage("Microsoft.EntityFrameworkCore.Design", project, version); EnvDteHelper.ShowError($"Installing EFCore.Design version {version}, please retry the command"); return; } } var processLauncher = new ProcessLauncher(project); var processResult = processLauncher.GetOutput(outputPath, generationType, null); if (processResult.StartsWith("Error:")) { throw new ArgumentException(processResult, nameof(processResult)); } var modelResult = processLauncher.BuildModelResult(processResult); switch (generationType) { case GenerationType.Dgml: GenerateDgml(modelResult, project); Telemetry.TrackEvent("PowerTools.GenerateModelDgml"); break; case GenerationType.Ddl: var files = project.GenerateFiles(modelResult, ".sql"); foreach (var file in files) { _package.Dte2.ItemOperations.OpenFile(file); } Telemetry.TrackEvent("PowerTools.GenerateSqlCreate"); break; case GenerationType.DebugView: var views = project.GenerateFiles(modelResult, ".txt"); foreach (var file in views) { _package.Dte2.ItemOperations.OpenFile(file); } Telemetry.TrackEvent("PowerTools.GenerateDebugView"); break; default: break; } } catch (Exception exception) { _package.LogError(new List <string>(), exception); } }