private static void RunInternal(GameProject.Project project, GameDev.BuildConfiguration buildConfig, bool debug) { CallOnSTAThread(() => { if (m_vsInstance != null && !IsDebuggingInternal() && BuildDone && BuildSucceeded) { m_vsInstance.ExecuteCommand(debug ? "Debug.Start" : "Debug.StartWithoutDebugging"); } }); }
private static void BuildSolutionInternal(Project project, GameDev.BuildConfiguration buildConfig, bool showWindow) { if (IsDebuggingInternal()) { Utils.Logger.Log(Utils.MessageTypes.Error, "Failed to build, Visual Studio is currently running a process"); return; } OpenVisualStudioInternal(project.Solution); BuildDone = BuildSucceeded = false; CallOnSTAThread(() => { if (!m_vsInstance.Solution.IsOpen) { m_vsInstance.Solution.Open(project.Solution); } m_vsInstance.MainWindow.Visible = showWindow; m_vsInstance.Events.BuildEvents.OnBuildProjConfigBegin += OnBuildSolutionBegin; m_vsInstance.Events.BuildEvents.OnBuildProjConfigDone += OnBuildSolutionDone; }); var configName = GetConfigurationName(buildConfig); try { foreach (var pdbFile in System.IO.Directory.GetFiles(System.IO.Path.Combine($"{project.Path}", $@"x64\{configName}"), "*.pdb")) { System.IO.File.Delete(pdbFile); } } catch (Exception ex) { Debug.WriteLine(ex.Message); } CallOnSTAThread(() => { m_vsInstance.Solution.SolutionBuild.SolutionConfigurations.Item(configName).Activate(); m_vsInstance.ExecuteCommand("Build.BuildSolution"); m_resetEvent.Wait(); m_resetEvent.Reset(); }); }
public static void Run(GameProject.Project project, GameDev.BuildConfiguration buildConfig, bool debug) { lock (m_lock) { RunInternal(project, buildConfig, debug); } }
public static string GetConfigurationName(GameDev.BuildConfiguration config) => m_buildConfigurationNames[(int)config];
public static void BuildSolution(Project project, GameDev.BuildConfiguration buildConfig, bool showWindow = true) { lock (m_lock) { BuildSolutionInternal(project, buildConfig, showWindow); } }