Konsol yerine Visual Studio'da bir konsol uygulamasının çıktısına sahip olma


120

Eclipse ile Java'da bir konsol uygulaması yaparken, Visual Studio'da olduğu gibi bir konsolun açılması yerine çıktının IDE'nin kendisinde bir metin kutusuna yerleştirildiğini görüyorum. Programdan çıktıktan sonra bile, tekrar çalıştırana kadar silinmediği için içinde yazılan metni yine de iyi bir şekilde kullanabilirim. Visual Studio ile böyle bir şey başarılabilir mi? Bunu yapmak yerine biliyorum

System.Console.WriteLine(str);

Yapabilirim

System.Diagnostics.Debug.WriteLine(str);

ancak Çıktı penceresinde tüm yüklü semboller ve benzerleri gibi çok fazla "önemsiz" aldığınız için aynı şey değildir.

Daha da iyisi, uygulamanızı çalıştırdığınızda, konsolu çalıştırmak yerine her şeyin IDE'nin kendisinde yapılması mümkün müdür?


VS'nin hangi sürümünü kullanıyorsunuz?
Gabe

Test Sonuçları bölmeniz var mı?
Gabe

Ben hiç fark etmedim. Bunu kontrol edeceğim. Almalı mıyım?
elysium

Yanıtlar:


52

Araçlar -> Visual Studio Seçenekleri İletişim Kutusu -> Hata Ayıklama -> "Tüm Çıktı Penceresi Metnini Hemen Pencereye Yönlendir" seçeneğini işaretleyin.


68
Bu onay kutusunu işaretledim, ancak yine de bir Konsol açılır penceresi alıyorum ve "Çıktı" penceresinde (Hata Ayıklama, Test Etme, Oluşturma, ..) veya "Anında Pencerede" hiçbir şey yok.
GuiSim

6
@EvenLisle, stolsvik'in cevabında olduğu gibi uygulama türünü Windows Uygulaması olarak değiştirmeniz gerekir . Bu cevapta bahsedilen seçenek, her durumda benim için varsayılan olarak açıktı.
TooTone

3
"Tüm Çıktı Penceresi Metnini Hemen Pencereye Yeniden Yönlendir" tam olarak ne anlama geliyor? Gerekirse çeşitli bağlamlar kullanın. "Hemen pencere" nin ne olduğu kafam karıştı.
Xonatron

11
@TooTone Soru açıkça bir "konsol uygulaması" için belirtiyor ve bunu sadece hata ayıklama amacıyla başka bir şeye değiştirmek, Console.ReadKey () bile yapamıyorum , sadece saçma!
MickyD

1
Yalnızca Debug.WriteLine () ile çalışır, Console.WriteLine () ile çalışmaz :(
Y2i

45

Gelen Visual Studio Seçenekler iletişim -> Hata -> "komut penceresi Yönlendirme Tüm Çıktı Penceresi Metin" seçeneğini işaretleyin. Ardından proje ayarlarınıza gidin ve türü "Konsol Uygulaması" ndan "Windows Uygulaması" na değiştirin. Bu noktada Visual Studio artık bir konsol penceresi açmaz ve çıktı, Visual Studio'daki Çıkış penceresine yönlendirilir. Ancak, anahtar veya metin girişi istemek veya konsolu temizlemek gibi "yaratıcı" hiçbir şey yapamazsınız - çalışma zamanı istisnaları alırsınız.


25
Bunu özellikle beceriksiz buluyorum. VS'de bunun arkasındaki mantık ne acaba? Tüm modern IDE'lerin, IDE içinde bir panele sahip olma yeteneği, girdi ve çıktı için konsol görevi görmelidir. (kafa

12
Soru açıkça bir "konsol uygulaması" için belirtiyor ve bunu sadece hata ayıklama amacıyla başka bir şeye değiştirmek, bunu yapamıyorum bile Console.ReadKey()düpedüz gülünç!
MickyD

Neden olduğundan emin değilim, ancak Output typeuygulamamı Windows Uygulamasından Konsola geri döndürmeye çalıştığımda , konsol penceresi uygulamamı çalıştırdığımda görünecek bir yer değil. Uygulamada hata ayıklayabiliyorum ve Maingiriş noktası da vuruluyor. Ayrıca bu yazıda belirtilen seçenek ayarını da geri aldım, ancak boşuna. VS 2017 topluluk sürümünü kullanıyorum. Konsol penceremi kaybettim (hıçkırarak).
RBT

3
Değeri ne olursa olsun, VS 15.8.7'de çıktıyı bir konsol uygulaması için yeniden yönlendirebilmemin tek yolu, onu bir Windows uygulamasına değiştirip Yeniden Yönlendirme kutusunu DENETLENMEDEN bırakmaktı. Kutuyu işaretlersem, çıktı gösterilmiyor.
dpberry178

6

kullanım System.Diagnostics.Trace

Hangi dinleyicileri eklediğinize bağlı olarak, izleme çıktısı hata ayıklama penceresine, konsola, bir dosyaya, veritabanına veya hepsine aynı anda gidebilir. Kendi TraceListener'ınızı uygulamak son derece basit olduğu için olasılıklar kelimenin tam anlamıyla sonsuzdur.


Evet, ama bilmek istediğim şey, bunu kendi başıma uygulamak zorunda kalmadan sadece yapmanın mümkün olup olmadığı.
yiyen elysium

@devoured Trace sınıfı, varsayılan olarak yalnızca hata ayıklama penceresine çıktı verir. Çıkışı başka bir yerde de görmek istiyorsanız, yalnızca fazladan dinleyici eklemeniz gerekir (ve kullanabileceğiniz önceden yazılmış birkaç tane vardır).
Joel Coehoorn

1
Hata Ayıklama Seçenekleri iletişim kutusuna gittim ve "Tüm Çıkış Penceresi metnini Anında Pencereye Yeniden Yönlendir" seçeneğini belirledim, böylece İzleme çıktısının Anında pencereye gitmesini sağladım, böylece hata ayıklama saçmalığı ile tamamen karışmasın.
Gabe

2

Visual Studio için en son sürümleri kontrol etmenin zamanı geldi millet. Bazılarınız için daha önce işe yaramayan en önerilen çözüm şimdi işe yarayabilir.

Visual Studio 2017'de ( Sürüm 15.4.2 ve üzeri), to Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Windowbenim için çalıştı.

Birkaç Not: 1. Hemen Penceresini görmek için, Hata Ayıklama modunda olduğunuzdan emin olun . 2. Şimdi, aşağıda gösterildiği gibi, emrinizde olan Çağrı Yığını, Kesme Noktaları ve Komut Penceresi olmak üzere 3 başka hata ayıklama aracı olmalıdır:

görüntü açıklamasını buraya girin

En iyi dileklerimle!


V15.9.4'te test edilmiştir, çalışmaz (en azından bir konsol uygulaması için değil).
bta

Hmm. Yapılandırmalarınızın bir ekran görüntüsünü paylaşabilirseniz, sorunu benim tarafımda kopyalamaya çalışabilirim. Aksi takdirde, çözüldüyse çözümünüzü paylaşabilirsiniz. Visual Studio 15.9.4 için sürüm notları docs.microsoft.com/en-us/visualstudio/releasenotes/… adresinde mevcuttur, ortamınıza bağlı olarak orada bazı yararlı ipuçları bulabilirsiniz. Visual Studio 2017 (Çıktı Penceresi) Belgeler : docs.microsoft.com/en-us/visualstudio/ide/reference/…
kuzevni

Test ettiğiniz projenin bir "Windows uygulaması" değil, bir "konsol uygulaması" olarak oluşturulduğundan emin olun. Yaklaşımınız bir Windows uygulamasıyla çalışır, ancak OP'nin belirttiği bu değildir.
bta

1

Doğrudan gerçek uygulamanızı çalıştırmak yerine çalıştırdığınız bir sarmalayıcı uygulaması oluşturabilirsiniz. Sarmalayıcı uygulama stdout'u dinleyebilir ve her şeyi Trace'e yönlendirebilir. Ardından, sarmalayıcınızı başlatmak ve çalıştırılacak gerçek uygulamaya giden yolu geçmek için çalıştırma ayarlarını değiştirin.

Ayrıca, sarmalayıcıya bir hata ayıklayıcı eklenmişse, sarmalayıcının hata ayıklayıcıyı yeni işleme otomatik olarak eklemesini de sağlayabilirsiniz.


0

Bunun başka bir cevap olduğunu biliyorum, ancak "Windows Uygulamasına Geçiş" bölümünde kafaları karışabilecek yeni Web Geliştiricileri için bir şeyler yazacağımı düşündüm, çünkü varsayılan olarak Visual Studio 2013'te bir MVC uygulaması düşünüyorum. varsayılan olarak bir Sınıf Kitaplığı Çıktı Türüdür.

Web Uygulamam varsayılan olarak "Sınıf Kitaplığı" çıktı türü olarak ayarlanmıştır. Bunu değiştirmek zorunda değilsin. Tek yapmam gereken, Araçlar> Seçenekler> Hata Ayıklama> Tüm Çıktı Penceresi metnini Anında Pencereye Yeniden Yönlendir seçeneğine gitme önerilerini izlemekti. Daha sonra System.Diagnostics.Traceyukarıdaki Joel Coehoorn'un önerisini kullandım .


0

Konsol yeteneği (ReadKey, String with Format ve arg vb.) İle çalışmak ve çıktıyı görmek ve kaydetmek için benim için çalışan basit bir çözüm:

Ben yazma o TextWriter yazma Consoleve Traceve değiştir Console.Outonunla.

Dialog -> Hata Ayıklama -> "Tüm Çıktı Penceresi Metnini Hemen Pencereye Yönlendir" seçeneğini kullanırsanız, onu Hemen Pencereden alırsınız ve oldukça temizdir.

kodum: kodumun başında:

   Console.SetOut(new TextHelper());

ve sınıf:

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);

        }

    }

Not: Tam ihtiyacım olanı geçersiz kılıyorum, bu nedenle başka türler yazarsanız daha fazlasını geçersiz kılmalısınız


0

System.Diagnostics.DebugÇıktı penceresinde çok fazla "önemsiz" üretmeyle ilgili : Çıktı penceresinde sağ tıklayarak bunu kapatabilirsiniz. Örneğin, devre dışı bırakmak istediğiniz bir "Modül Yük Mesajları" ve saklamak istediğiniz bir "Program Çıkışı" var.


0

Bunu yapmak için üç seçeneğiniz var ama bu önemsiz değil. Tüm IDE'lerin ana fikri, hepsinin alt (hata ayıklama) süreçlerinin ebeveynleri olmasıdır. Bu durumda standart giriş, çıkış ve hata işleyici ile manipüle etmek mümkündür. Böylece IDE'ler alt uygulamaları başlatır ve dahili çıktı penceresine yönlendirir. Bir olasılık daha biliyorum ama gelecekte gelecek

  1. Visual Studio için kendi hata ayıklama motorunuzu uygulayabilirsiniz. Hata Ayıklama Motoru denetimi uygulama için başlatma ve hata ayıklama. Bunun örnekleri, bunun nasıl yapılacağını docs.microsoft.com adresinde bulabilirsiniz ( Visual Studio Hata Ayıklama motoru )
  2. C ++ için std işleyicisinin çoğaltılmasını kullanarak form uygulamasını yeniden yönlendirin veya c # için Console.SetOut (TextWriter) kullanın. Çıktı penceresine yazdırmanız gerekiyorsa, Visual Studio uzantı SDK'sını kullanmanız gerekir. Github'da bulabileceğiniz ikinci varyant örneği .
  3. System.Diagnostics.Debug.WriteLine (çıktıya yazdırmak için) kullanan uygulamayı başlatın ve ardından alt uygulamayı başlatır. Bir çocuğu başlatırken, standart çıktıyı borularla ebeveyne yönlendirmeniz gerekir. MSDN'de bir örnek bulabilirsiniz. Ama bunun en iyi yol olmadığını düşünüyorum.

0

Console.WriteLine'dan çıktı almanız gerekiyorsa ve Tüm Çıktı Penceresi Metnini Hemen Pencereye Yeniden Yönlendir işlevi çalışmıyorsa ve NUnit kullanarak Tümleşik Test Gezgini'nden Testlerin çıktısını bilmeniz gerekiyorsa, sorunumuz VS 2017'de zaten çözüldü :

Jon Skeet tarafından C # In Depth'ten alınan örnek: Jon Skeet tarafından C # In Depth'ten alınan örnek Bu, Text Explorer'da şu çıktıyı üretir: Görev Gezgini

Sağda Geçen Zaman'ın altındaki Mavi Çıktı'ya tıkladığımızda ve şunu üretir: Standart Çıkış

Standart Çıktı , Console.WriteLine tarafından üretilen, istediğimiz Çıktıdır.

Konsol ve Windows Form Uygulamaları için VS 2017'de çalışır, ancak yalnızca Hata Ayıklama veya Çalıştırma sırasında Test Gezgini için oluşturulan Çıktı için çalışır; her neyse, Console.WriteLine çıktısına olan ana ihtiyacım bu.


-1

Bunun yerine, çıktıyı bir test sonucunda toplayabilirsiniz.

Girdi sağlayamazsınız, ancak her biri çıktıyı toplayan farklı komut satırı bağımsız değişkenlerine sahip birkaç testi kolayca sağlayabilirsiniz.

Amacınız hata ayıklamaksa, bu tekrarlanabilir bir hata ayıklama senaryosu sunmanın az çaba gerektiren bir yoludur.

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

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

-7

Adım 1: Solution Explorer'da Project Name'e sağ tıklayın ve ardından Output tipini Window Application olarak yapın

Adım 2: Hata Ayıklama -> Seçenekler .. -> Hata Ayıklama (Genişlet) -> Genel -> Tüm Çıktı Penceresi Metnini Hemen Pencereye Yönlendir


3
Bu cevap daha önce üç kez verilmişti. Sorulan soruyu ele almıyor.
Klay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.