コンソールの代わりにVisual Studioにコンソールアプリケーションの出力がある


120

Eclipseを使用してJavaでコンソールアプリケーションを実行すると、Visual Studioのようにコンソールがポップアップするのではなく、IDE自体のテキストボックスに出力が表示されます。これは便利です。プログラムが終了した後でも、書き込まれたテキストは、もう一度実行するまで消去されないため、引き続き活用できます。Visual Studioでそのようなことを達成することは可能ですか?する代わりに

System.Console.WriteLine(str);

できます

System.Diagnostics.Debug.WriteLine(str);

ただし、ロードされたすべてのシンボルなど、出力ウィンドウに多くの「ジャンク」が表示されるため、まったく同じではありません。

さらに良いことに、アプリケーションを実行するときに、コンソールを実行するのではなく、IDE自体ですべてを実行することは可能ですか?


どのバージョンのVSを使用していますか?
Gabe 2010年

テスト結果ペインはありますか?
Gabe

気づかなかった。確認します。持っておくべき?
食欲をそそるエリュシウム

回答:


52

[ツール]-> [Visual Studioオプション]ダイアログ->デバッグ-> [すべての出力ウィンドウのテキストをイミディエイトウィンドウにリダイレクトする]をオンにします。


68
このチェックボックスをオンにしましたが、「コンソール」ポップアップが表示され、「出力」ウィンドウ(デバッグ、テスト、ビルドなど)または「イミディエイトウィンドウ」には何も表示されません。
GuiSim

6
@EvenLisle stolsvikの回答のように、アプリケーションタイプをWindowsアプリケーションに変更する必要があります。この回答に記載されているオプションは、いずれにしてもデフォルトでオンになっています。
TooTone 2014

3
「すべての出力ウィンドウのテキストをイミディエイトウィンドウにリダイレクトする」とはどういう意味ですか?必要に応じて、さまざまなコンテキストを使用してください。「イミディエイトウィンドウ」とは何なのか混乱しています。
Xonatron

11
@TooTone質問は、「コンソールアプリケーション」を明示し、デバッグ目的でそれを別の何かに変更することを明確に述べています。ここでは、Console.ReadKey()もまったくばかげています!
MickyD 2017年

1
Debug.WriteLine()でのみ機能し、Console.WriteLine()では機能しません:(
Y2i

45

ではVisual Studioの [オプション]ダイアログ- >デバッグ- >「イミディエイトウィンドウにリダイレクトすべての出力ウィンドウテキスト」を確認してください。次に、プロジェクト設定に移動し、タイプを「コンソールアプリケーション」から「Windowsアプリケーション」に変更します。その時点で、Visual Studioはコンソールウィンドウを開かなくなり、出力はVisual Studioの出力ウィンドウにリダイレクトされます。ただし、キーやテキストの入力を要求したり、コンソールをクリアしたりするなど、「創造的」なことは何もできません。ランタイム例外が発生します。


25
これは特に不器用だと思います。VSでこれの背後にある理論的根拠は何ですか?現代のすべてのIDEが、IDE内のパネルを入出力のコンソールとして動作させることができるはずです。(スクラッチヘッド)

12
質問は、「コンソールアプリケーション」を明示し、デバッグ目的でそれを別の何かに変更することを明確に述べていますConsole.ReadKey()
MickyD 2017年

理由は不明Output typeですが、アプリケーションをWindowsアプリケーションからコンソールに戻そうとしたときに、アプリケーションを実行してもコンソールウィンドウが表示されません。アプリケーションをデバッグでき、Mainエントリポイントもヒットしています。また、この投稿に記載されているオプション設定を元に戻しましたが、役に立ちませんでした。VS 2017コミュニティエディションを使用しています。コンソールウィンドウを紛失しました(すすり泣き)。
RBT

3
価値があるのは、VS 15.8.7でコンソールアプリの出力をリダイレクトする唯一の方法は、それをWindowsアプリに変更し、[リダイレクト]ボックスをオフのままにすることでした。チェックボックスをオンにすると、出力が表示されません。
dpberry178 2018年

6

使用する System.Diagnostics.Trace

接続するリスナーに応じて、トレース出力は、デバッグウィンドウ、コンソール、ファイル、データベース、またはすべてに一度に送信できます。独自のTraceListenerの実装は非常に簡単なので、可能性は文字通り無限です。


ええ、でも私が知りたいのは、自分で実装する必要がなく、それだけで実行できるかどうかです。
食欲をそそるエリュシウム2010年

@devoured Traceクラスは、デフォルトではデバッグウィンドウにのみ出力します。他の場所にも出力を表示したい場合は、追加のリスナーをアタッチするだけで済みます(すでにいくつかのリスナーが記述されています)。
Joel Coehoorn、2010年

1
[デバッグオプション]ダイアログボックスに移動し、[すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]を選択して、トレース出力がイミディエイトウィンドウに移動するようにしました。
Gabe

2

Visual Studioの最新リリースを確認するときが来ました。以前は機能しなかった最も提案された解決策が今は機能するかもしれません。

Visual Studio 2017(リリースバージョン15.4.2以降)では、Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Window私はうまくいきました。

注意事項:1.イミディエイトウィンドウを表示するには、デバッグモードになっていることを確認してください。2.これで、以下に示すように、3つのデバッグツール、つまり、コールスタック、ブレークポイント、およびコマンドウィンドウを使用できるようになります。

ここに画像の説明を入力してください

ご多幸を祈る!


v15.9.4でテストされましたが、機能しません(少なくともコンソールアプリケーションでは機能しません)。
-bta

うーん。構成のスクリーンショットを共有できる場合は、問題の再現を試みます。それ以外の場合は、解決されていればソリューションを共有できます。Visual Studioの15.9.4のリリースノートが利用可能であるdocs.microsoft.com/en-us/visualstudio/releasenotes/...、あなたはそこにいくつかの有用なヒントは、あなたの環境に応じて見つけるかもしれません。 Visual Studioの2017(出力ウィンドウ)ドキュメントdocs.microsoft.com/en-us/visualstudio/ide/reference/...
kuzevni

テストするプロジェクトが「Windowsアプリケーション」ではなく「コンソールアプリケーション」として作成されたことを再確認してください。あなたのアプローチはWindowsアプリケーションで機能しますが、それはOPが指定したものではありません。
bta

1

実際のアプリを直接実行する代わりに、実行するラッパーアプリケーションを作成できます。ラッパーアプリケーションはstdoutをリッスンし、すべてをTraceにリダイレクトできます。次に、実行設定を変更してラッパーを起動し、実行する実際のアプリへのパスを渡します。

デバッガーがラッパーに接続されている場合、ラッパーにデバッガーを新しいプロセスに自動接続させることもできます。


0

私はこれが別の答えであることを知っていますが、「Windowsアプリケーションへの変更」の部分について混乱する可能性がある新しいWeb開発者のために何か書き留めておきたいと思いました。デフォルトはクラスライブラリの出力タイプです。

私のWebアプリケーションは、デフォルトで「クラスライブラリ」の出力タイプとして設定されています。変更する必要はありません。ツール>オプション>デバッグ>すべての出力ウィンドウのテキストをイミディエイトウィンドウにリダイレクトするという提案に従うだけで済みました。次に、System.Diagnostics.Trace上記のJoel Coehoorn の提案を使用しました。


0

私のために、コンソール機能(ReadKey、StringとFormatとargなど)を操作し、出力を確認して保存するための単純なソリューション:

TextWriterを書いてConsole、それを書き込んだり、それにTrace置き換えたりConsole.Outします。

ダイアログ->デバッグ->「すべての出力ウィンドウのテキストをイミディエイトウィンドウにリダイレクトする」をチェックすると、イミディエイトウィンドウに表示され、非常にクリーンになります。

私のコード:私のコードの始めに:

   Console.SetOut(new TextHelper());

そしてクラス:

public class TextHelper : TextWriter
    {
        TextWriter console;

        public TextHelper() {
            console = Console.Out;
        }

        public override Encoding Encoding { get { return this.console.Encoding; } }
        public override void WriteLine(string format, params object[] arg)
        {
            string s = string.Format(format, arg);
            WriteLine(s);
        }
        public override void Write(object value)
        {
            console.Write(value);
            System.Diagnostics.Trace.Write(value);
        }

        public override void WriteLine(object value)
        {
            Write(value);
            Write("\n");
        }
        public override void WriteLine(string value)
        {
            console.WriteLine(value);
            System.Diagnostics.Trace.WriteLine(value);

        }

    }

注:私は必要なものだけをオーバーライドするので、他のタイプを作成する場合は、さらにオーバーライドする必要があります


0

System.Diagnostics.Debug出力ウィンドウで大量の「ジャンク」を生成することに関して:出力ウィンドウで右クリックすることにより、これをオフにすることができます。たとえば、無効にしたい項目「モジュールロードメッセージ」と保持したい項目「プログラム出力」があります。


0

これには3つの可能性がありますが、それは簡単なことではありません。すべてのIDEの主な考え方は、それらすべてが子(デバッグ)プロセスの親であるということです。この場合、標準入力、出力、およびエラーハンドラーで操作できます。したがって、IDEは子アプリケーションを起動し、内部出力ウィンドウにリダイレクトします。もう1つの可能性について知っていますが、将来的には可能になります

  1. Visual Studio用の独自のデバッグエンジンを実装できます。アプリケーションのデバッグエンジン制御の開始とデバッグ。この例は、docs.microsoft.com(Visual Studio Debug engine)でこれを行う方法を見つけることができます
  2. c ++のstdハンドラーの複製を使用してフォームアプリケーションをリダイレクトするか、c#のConsole.SetOut(TextWriter)を使用します。出力ウィンドウに印刷する必要がある場合は、Visual Studio拡張SDKを使用する必要があります。Githubで見つけられる2番目のバリアントの例。
  3. System.Diagnostics.Debug.WriteLine(出力への出力用)を使用するアプリケーションを開始すると、子アプリケーションが開始されます。子を開始するときは、パイプを使用してstdoutを親にリダイレクトする必要があります。MSDNで例を見つけることができます。しかし、これは最良の方法ではないと思います。

0

Console.WriteLineからの出力が必要で、 すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトが機能せず、統合テストエクスプローラーからのテストの出力を知る必要がある場合は、NUnit.Frameworkを使用して、VS 2017で問題が既に解決されています:

Jon SkeetによるC#In Depthからの例 Jon SkeetによるC#の詳細からの例 :テキストエクスプローラーでこの出力を生成します。 タスクエクスプローラー

右側の[経過時間]の下の[青い出力]をクリックすると、次のようになります。 標準出力

標準出力は、Console.WriteLineによって生成される目的の出力です。

VS 2017のコンソールおよびWindowsフォームアプリケーションに対して機能しますが、デバッグまたは実行時にテストエクスプローラー用に生成された出力に対してのみ機能します。とにかく、これはConsole.WriteLine出力の私の主な必要性です。


-1

代わりに、テスト結果の出力を収集できます。

入力を提供することはできませんが、さまざまなコマンドライン引数を使用して複数のテストを簡単に提供できます。各テストは出力を収集します。

デバッグが目標の場合、これは繰り返し可能なデバッグシナリオを提供するための簡単な方法です。

namespace Commandline.Test
{
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]
    public class CommandlineTests
    {
        [TestMethod]
        public void RunNoArguments()
        {
            Commandline.Program.Main(new string[0]);
        }
    }
}

-7

ステップ1:ソリューションエクスプローラーでプロジェクト名を右クリックし、出力タイプをウィンドウアプリケーションにします

手順2:デバッグ->オプション...->デバッグ(展開)->全般->すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクト


3
この回答は以前に3回出されています。尋ねられた質問には対応していません。
Klay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.