using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.Text; using EnvDTE; using LiveLogger4Log4Net; namespace ConsoleApplication1 { class Client : IL4NServerCallback { #region IL4NServerCallback Members public void ReceiveLog(LiveLogger4Log4Net.LogMessage log) { Console.WriteLine("Message:{0}", log.Message); foreach (StackStep step in log.StackSteps ) Console.WriteLine("\t{0}\n\tline:{1}", step.SourceFile, step.LineNumber); EnvDTE.DTE dte; try { //Open Already Running Version of Visual Studio dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE"); } catch { //If it failes, then one needs to be created //Open new Instance of studio System.Type t = System.Type.GetTypeFromProgID("VisualStudio.DTE"); dte = (EnvDTE.DTE)System.Activator.CreateInstance(t); } //Make it visible, and stay under user control, not close when this app closes dte.MainWindow.Visible = true; dte.UserControl = true; //Open up incident file and select given line Window win = dte.ItemOperations.OpenFile(log.StackSteps[0].SourceFile, EnvDTE.Constants.vsViewKindTextView); TextSelection selection = dte.ActiveDocument.Selection as TextSelection; selection.GotoLine(log.StackSteps[0].LineNumber, true); } #endregion } class Program { static void Main(string[] args) { Console.WindowWidth = 120; Console.WriteLine("choose a logger name and press return"); String pressed = Console.ReadLine(); Client c = new Client(); InstanceContext context = new InstanceContext(c); L4NServerClient proxy = new L4NServerClient(context); if (String.IsNullOrEmpty(pressed)) proxy.Register(); else proxy.RegisterForSpecificLogger(new[] {pressed}); Console.WriteLine("Press a key when you want to terminate the listener"); Console.ReadKey(); } } }