From 015104ac24f046d5df4d9cc085420ce832168785 Mon Sep 17 00:00:00 2001 From: Mark Palange Date: Fri, 6 Jun 2008 00:18:26 +0000 Subject: DEV-16285 - Give vstool.exe better error reporting output. --- indra/tools/vstool/VSTool.exe | Bin 24576 -> 24576 bytes indra/tools/vstool/main.cs | 305 +++++++++++++++++++++++++----------------- 2 files changed, 180 insertions(+), 125 deletions(-) (limited to 'indra/tools') diff --git a/indra/tools/vstool/VSTool.exe b/indra/tools/vstool/VSTool.exe index c568c8dd6a..2d87971111 100755 Binary files a/indra/tools/vstool/VSTool.exe and b/indra/tools/vstool/VSTool.exe differ diff --git a/indra/tools/vstool/main.cs b/indra/tools/vstool/main.cs index 0cd57b6b84..1dc0d2c1c6 100644 --- a/indra/tools/vstool/main.cs +++ b/indra/tools/vstool/main.cs @@ -16,43 +16,70 @@ namespace VSTool { public static object GetProperty(object from_obj, string prop_name) { - Type objType = from_obj.GetType(); - return objType.InvokeMember( - prop_name, - BindingFlags.GetProperty, null, - from_obj, - null); + try + { + Type objType = from_obj.GetType(); + return objType.InvokeMember( + prop_name, + BindingFlags.GetProperty, null, + from_obj, + null); + } + catch (Exception e) + { + Console.WriteLine("Error getting property: \"{0}\"", prop_name); + Console.WriteLine(e.Message); + throw e; + } } public static object SetProperty(object from_obj, string prop_name, object new_value) { - object[] args = { new_value }; - Type objType = from_obj.GetType(); - return objType.InvokeMember( - prop_name, - BindingFlags.DeclaredOnly | - BindingFlags.Public | - BindingFlags.NonPublic | - BindingFlags.Instance | - BindingFlags.SetProperty, - null, - from_obj, - args); + try + { + object[] args = { new_value }; + Type objType = from_obj.GetType(); + return objType.InvokeMember( + prop_name, + BindingFlags.DeclaredOnly | + BindingFlags.Public | + BindingFlags.NonPublic | + BindingFlags.Instance | + BindingFlags.SetProperty, + null, + from_obj, + args); + } + catch (Exception e) + { + Console.WriteLine("Error setting property: \"{0}\"", prop_name); + Console.WriteLine(e.Message); + throw e; + } } public static object CallMethod(object from_obj, string method_name, params object[] args) { - Type objType = from_obj.GetType(); - return objType.InvokeMember( - method_name, - BindingFlags.DeclaredOnly | - BindingFlags.Public | - BindingFlags.NonPublic | - BindingFlags.Instance | - BindingFlags.InvokeMethod, - null, - from_obj, - args); + try + { + Type objType = from_obj.GetType(); + return objType.InvokeMember( + method_name, + BindingFlags.DeclaredOnly | + BindingFlags.Public | + BindingFlags.NonPublic | + BindingFlags.Instance | + BindingFlags.InvokeMethod, + null, + from_obj, + args); + } + catch (Exception e) + { + Console.WriteLine("Error calling method \"{0}\"", method_name); + Console.WriteLine(e.Message); + throw e; + } } }; @@ -77,6 +104,8 @@ namespace VSTool static string startup_project = null; static string config = null; + static object dte = null; + static object solution = null; /// /// The main entry point for the application. @@ -86,125 +115,98 @@ namespace VSTool { bool need_save = false; - parse_command_line(args); - - Console.WriteLine("Opening solution: {0}", solution_name); - - bool found_open_solution = true; - - Console.WriteLine("Looking for existing VisualStudio instance..."); - - // Get an instance of the currently running Visual Studio .NET IDE. - object dte = null; - - // dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.7.1"); - string full_solution_name = System.IO.Path.GetFullPath(solution_name); - if (false == use_new_vs) - { - dte = GetIDEInstance(full_solution_name); - } - - object sol = null; - - if (dte == null) + try { - try - { - Console.WriteLine(" Didn't find open solution, now opening new VisualStudio instance..."); - Console.WriteLine(" Reading .sln file version..."); - string version = GetSolutionVersion(full_solution_name); + parse_command_line(args); - Console.WriteLine(" Opening VS version: {0}...", version); - string progid = GetVSProgID(version); + Console.WriteLine("Opening solution: {0}", solution_name); - Type objType = Type.GetTypeFromProgID(progid); - dte = System.Activator.CreateInstance(objType); - - Console.WriteLine(" Opening solution..."); + bool found_open_solution = GetDTEAndSolution(); - sol = ViaCOM.GetProperty(dte, "Solution"); - object[] openArgs = {full_solution_name}; - ViaCOM.CallMethod(sol, "Open", openArgs); - } - catch( Exception e ) + // Walk through all of the projects in the solution + // and list the type of each project. + foreach (DictionaryEntry p in projectDict) { - Console.WriteLine(e.Message); - Console.WriteLine("Quitting do error opening: {0}", full_solution_name); - return; - } - found_open_solution = false; - } - - if (sol == null) - { - sol = ViaCOM.GetProperty(dte, "Solution"); - } - - // Walk through all of the projects in the solution - // and list the type of each project. - foreach(DictionaryEntry p in projectDict) - { - string project_name = (string)p.Key; - string working_dir = (string)p.Value; - if(SetProjectWorkingDir(sol, project_name, working_dir)) - { - need_save = true; + string project_name = (string)p.Key; + string working_dir = (string)p.Value; + if (SetProjectWorkingDir(solution, project_name, working_dir)) + { + need_save = true; + } } - } - if(config != null) - { - try - { - object solBuild = ViaCOM.GetProperty(sol, "SolutionBuild"); - object solCfgs = ViaCOM.GetProperty(solBuild, "SolutionConfigurations"); - object[] itemArgs = { (object)config }; - object solCfg = ViaCOM.CallMethod(solCfgs, "Item", itemArgs); - ViaCOM.CallMethod(solCfg, "Activate", null); - need_save = true; - } - catch( Exception e ) + if (config != null) { - Console.WriteLine(e.Message); + try + { + object solBuild = ViaCOM.GetProperty(solution, "SolutionBuild"); + object solCfgs = ViaCOM.GetProperty(solBuild, "SolutionConfigurations"); + object[] itemArgs = { (object)config }; + object solCfg = ViaCOM.CallMethod(solCfgs, "Item", itemArgs); + ViaCOM.CallMethod(solCfg, "Activate", null); + need_save = true; + } + catch (Exception e) + { + Console.WriteLine(e.Message); + } } - } - if (startup_project != null) - { - try + if (startup_project != null) { - // You need the 'unique name of the project to set StartupProjects. - // find the project by generic name. - object prjs = ViaCOM.GetProperty(sol, "Projects"); - object count = ViaCOM.GetProperty(prjs, "Count"); - for(int i = 1; i <= (int)count; ++i) + try { - object[] itemArgs = { (object)i }; - object prj = ViaCOM.CallMethod(prjs, "Item", itemArgs); - object prjName = ViaCOM.GetProperty(prj, "Name"); - if (0 == string.Compare((string)prjName, startup_project, ignore_case)) + // You need the 'unique name of the project to set StartupProjects. + // find the project by generic name. + object prjs = ViaCOM.GetProperty(solution, "Projects"); + object count = ViaCOM.GetProperty(prjs, "Count"); + for (int i = 1; i <= (int)count; ++i) { - object solBuild = ViaCOM.GetProperty(sol, "SolutionBuild"); - ViaCOM.SetProperty(solBuild, "StartupProjects", ViaCOM.GetProperty(prj, "UniqueName")); - need_save = true; - break; + object[] itemArgs = { (object)i }; + object prj = ViaCOM.CallMethod(prjs, "Item", itemArgs); + object prjName = ViaCOM.GetProperty(prj, "Name"); + if (0 == string.Compare((string)prjName, startup_project, ignore_case)) + { + object solBuild = ViaCOM.GetProperty(solution, "SolutionBuild"); + ViaCOM.SetProperty(solBuild, "StartupProjects", ViaCOM.GetProperty(prj, "UniqueName")); + need_save = true; + break; + } } } + catch (Exception e) + { + Console.WriteLine(e.Message); + } } - catch (Exception e) + + if (need_save) { - Console.WriteLine(e.Message); + if (found_open_solution == false) + { + ViaCOM.CallMethod(solution, "Close", null); + } } } - - if(need_save) + catch (Exception e) + { + Console.WriteLine(e.Message); + } + finally { - if(found_open_solution == false) + if (solution != null) { - ViaCOM.CallMethod(sol, "Close", null); + Marshal.ReleaseComObject(solution); + solution = null; + } + + if (dte != null) + { + Marshal.ReleaseComObject(dte); + dte = null; } - Console.WriteLine("Finished!"); } + Console.WriteLine("Finished!"); } public static bool parse_command_line(string[] args) @@ -285,6 +287,59 @@ namespace VSTool return true; } + public static bool GetDTEAndSolution() + { + bool found_open_solution = true; + + Console.WriteLine("Looking for existing VisualStudio instance..."); + + // Get an instance of the currently running Visual Studio .NET IDE. + // dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.7.1"); + string full_solution_name = System.IO.Path.GetFullPath(solution_name); + if (false == use_new_vs) + { + dte = GetIDEInstance(full_solution_name); + } + + if (dte == null) + { + try + { + Console.WriteLine(" Didn't find open solution, now opening new VisualStudio instance..."); + Console.WriteLine(" Reading .sln file version..."); + string version = GetSolutionVersion(full_solution_name); + + Console.WriteLine(" Opening VS version: {0}...", version); + string progid = GetVSProgID(version); + + Type objType = Type.GetTypeFromProgID(progid); + dte = System.Activator.CreateInstance(objType); + + Console.WriteLine(" Opening solution..."); + + solution = ViaCOM.GetProperty(dte, "Solution"); + object[] openArgs = { full_solution_name }; + ViaCOM.CallMethod(solution, "Open", openArgs); + } + catch (Exception e) + { + Console.WriteLine(e.Message); + Console.WriteLine("Quitting do to error opening: {0}", full_solution_name); + solution = null; + dte = null; + return found_open_solution; + } + found_open_solution = false; + } + + if (solution == null) + { + solution = ViaCOM.GetProperty(dte, "Solution"); + } + + return found_open_solution; + } + /// /// Get the DTE object for the instance of Visual Studio IDE that has /// the specified solution open. -- cgit v1.2.3