1

フォームベースのC#アプリケーションにコンソールを追加することは可能ですか?現在、私が次のようなことをするとき

Console.WriteLine("testing");

VS2010の出力ウィンドウに表示されます。コンソールをWindowsフォームアプリケーションに接続できるかどうかを知りたいので、出力がコンソールに表示されます。

編集:私の最初の質問は少し誤解を招くようで、それは私が達成したいことを正確に指定していませんでした。を使用してアプリケーションにコンソールを追加しました

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

しかし、私が本当に望んでいるのは、log4netコンソールアペンダーの出力がそのコンソールに表示されることですが、これは発生していません。私のアペンダーの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");

新しく追加されたコンソールウィンドウにはまだ表示されません。私がそれをどのように行うことができるかについての提案はありますか?

4

2 に答える 2

3

ただそれを捨てるために、log4net構成をロードするAllocConsole() 前に必ず行ってください。私はあなたの質問が尋ねるのと同じようなことをしようとしました、そして私の呼び出しをに移す前に同じ問題を抱えていました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%はわかりませんが、これで問題は解決しました。

于 2013-03-26T18:01:49.207 に答える
2

プロジェクトをコンソールアプリケーションにして、その逆ではなく、コンソールアプリケーションからフォームを作成/表示するだけです。

于 2013-02-13T21:20:12.170 に答える