2013-02-13 90 views
1

是否可以將控制檯添加到基於表單的C#應用​​程序? 目前,當我這樣做將控制檯appender添加到log4net中的窗體窗體

Console.WriteLine("testing"); 

它出現在VS2010的輸出窗口。 我想知道它是否可能將控制檯連接到我的Windows窗體應用程序。因此,輸出顯示在控制檯中。

編輯: 看起來像我的第一個問題有點誤導,它並沒有完全指定我想要完成的。我只是增加了一個控制檯來使用

[DllImport("kernel32")] 
    static extern int AllocConsole(); 

我的應用程序不過是我真正想要的是在 該控制檯未發生顯示log4net的控制檯附加目的地的輸出。 我的appender的XML是

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <mapping> 
     <level value="INFO" /> 
     <foreColor value="White" /> 
     <backColor value="Red, HighIntensity" /> 
    </mapping> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%class %date - %message %newline" /> 
    </layout> 
    </appender> 
現在

,當我去喜歡

log.info("Some log"); 

它仍然沒有在新添加的控制檯窗口中顯示。有關我如何做到這一點的任何建議?

+1

看看這個鏈接。 [控制檯窗口中窗體應用程序] [1] [1]:http://stackoverflow.com/questions/472282/show-console-in-windows-application – Tabish 2013-02-13 21:19:44

回答

2

只需使您的項目成爲控制檯應用程序,然後從控制檯應用程序創建/顯示窗體而不是其他方式。

+0

如果你這樣做,您將需要確保該窗口在STA上實例化並運行。 – sudarsanyes 2014-09-09 08:21:16

3

只是把它扔在那裏,要確保你AllocConsole()之前你加載你的log4net的配置。我嘗試做類似於您的問題的問題,並在將我的呼叫轉至AllocConsole之前遇到同樣的問題。一旦我移動它,log4net會自動寫入我分配的控制檯。

本質...(記住做檢查這裏不包括所有的常規錯誤)......

using System; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 
namespace SampleApp 
{ 
    class Program 
    { 
     [DllImport("kernel32.dll", SetLastError=true, CallingConvention=CallingConvention.Winapi)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     private static extern bool AllocConsole(); 

     [DllImport("kernel32.dll", SetLastError=true, CallingConvention=CallingConvention.Winapi)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     private static extern bool FreeConsole(); 

     [STAThread] 
     private static void Main(string[] args) 
     { 
      // (1) Make sure we have a console to use. 
      Program.AllocConsole(); 
      try { 
       // (2) Tell log4net to configure itself according to our app.config data. 
       log4net.Config.XmlConfigurator.Configure(); 
       // (3) Usual WinForms startup code here. 
       Application.EnableVisualStyles(); 
       Application.SetCompatibleTextRenderingDefault(false); 
       Application.Run(new SampleApp.Form1()); 
      } catch (Exception) { 
       // WAT! 
      } 
      // (4) Remember to release the console before we exit. 
      Program.FreeConsole(); 
     } 
    } 
} 

不是100%肯定它爲什麼有差別當控制檯分配,但這確實爲我解決了這個問題。

+0

這也適用於我。即使我在AllocConsole之前配置了log4net,我仍然可以正常使用ConsoleAppender,但是一旦我嘗試使用ColoredConsoleAppender,它將只能在AllocConsole重定向完成並重定向標準輸出之後完成配置。 – 2014-08-06 12:39:55