Có đầu ra của ứng dụng bảng điều khiển trong Visual Studio thay vì bảng điều khiển


120

Khi thực hiện một ứng dụng bảng điều khiển trong Java với Eclipse, tôi thấy đầu ra được đặt trong một hộp văn bản trong chính IDE, thay vì có một bảng điều khiển bật lên như trong Visual Studio. Điều này rất hữu ích, vì ngay cả sau khi chương trình đã thoát, tôi vẫn có thể sử dụng tốt văn bản được viết trong đó, vì nó sẽ không bị xóa cho đến khi tôi chạy lại. Có thể đạt được bất cứ điều gì như vậy với Visual Studio không? Tôi biết điều đó thay vì làm

System.Console.WriteLine(str);

tôi có thể làm

System.Diagnostics.Debug.WriteLine(str);

nhưng nó không hoàn toàn giống như vậy, vì bạn nhận được rất nhiều "rác" trong cửa sổ Output, như tất cả các ký hiệu được tải và tương tự.

Thậm chí tốt hơn, liệu có thể có mọi thứ được thực hiện trong chính IDE, khi bạn chạy ứng dụng của mình, thay vì để bảng điều khiển đang chạy?


Bạn đang sử dụng phiên bản VS nào?
Gabe

Bạn có ngăn Kết quả Kiểm tra không?
Gabe

Tôi chưa bao giờ nhận ra nó. Tôi sẽ kiểm tra nó. Tôi có nên có nó không?
elysium nuốt chửng vào

Câu trả lời:


52

Trong Hộp thoại Công cụ -> Tùy chọn Visual Studio -> Gỡ lỗi -> Kiểm tra "Chuyển hướng Tất cả Văn bản Cửa sổ Đầu ra đến Cửa sổ Ngay lập tức".


68
Tôi đã chọn hộp kiểm này nhưng tôi vẫn nhận được cửa sổ bật lên Bảng điều khiển và không có gì trong cửa sổ "Đầu ra" (Gỡ lỗi, Kiểm tra, Xây dựng, ..) hoặc "Cửa sổ ngay lập tức".
GuiSim

6
@EvenLisle bạn cần thay đổi loại ứng dụng thành Ứng dụng Windows như trong câu trả lời của stolsvik . Tùy chọn được đề cập trong câu trả lời này được bật theo mặc định cho tôi trong mọi trường hợp.
TooTone

3
"Chuyển hướng tất cả văn bản cửa sổ đầu ra sang cửa sổ ngay lập tức" nghĩa là gì? Sử dụng nhiều ngữ cảnh khác nhau nếu bạn cần. Tôi đang bối rối bởi "cửa sổ ngay lập tức" là gì.
Xonatron

11
@TooTone Câu hỏi nêu rõ về một "ứng dụng console" và việc thay đổi nó thành một thứ khác chỉ nhằm mục đích gỡ lỗi, nơi mà tôi thậm chí không thể Console.ReadKey () thật nực cười!
MickyD

1
Chỉ hoạt động với Debug.WriteLine (), không hoạt động với Console.WriteLine () :(
Y2i

45

Trong Hộp thoại Tùy chọn Visual Studio -> Gỡ lỗi -> Kiểm tra "Chuyển hướng Tất cả Văn bản Cửa sổ Đầu ra đến Cửa sổ Ngay lập tức". Sau đó, đi tới cài đặt dự án của bạn và thay đổi loại từ "Ứng dụng bảng điều khiển" thành "Ứng dụng Windows". Tại thời điểm đó, Visual Studio không mở ra cửa sổ bảng điều khiển nữa và đầu ra được chuyển hướng đến cửa sổ Đầu ra trong Visual Studio. Tuy nhiên, bạn không thể làm bất cứ điều gì "sáng tạo", như yêu cầu nhập phím hoặc văn bản, hoặc xóa bảng điều khiển - bạn sẽ nhận được các ngoại lệ về thời gian chạy.


25
Tôi thấy điều này đặc biệt vụng về. Tôi tự hỏi, có phải lý do đằng sau điều này trong VS không? Nó phải là khả năng của tất cả các IDE ngày nay để có một bảng điều khiển trong chính IDE hoạt động như một bảng điều khiển cho đầu vào và đầu ra. (gãi đầu)

12
Câu hỏi nêu rõ cho một "ứng dụng bảng điều khiển" và thay đổi nó thành một cái gì đó khác chỉ nhằm mục đích gỡ lỗi, nơi tôi thậm chí không thể Console.ReadKey()chỉ thẳng lên là nực cười!
MickyD

Không chắc tại sao nhưng khi tôi cố gắng hoàn nguyên Output typeứng dụng của mình từ Ứng dụng Windows sang Bảng điều khiển thì cửa sổ bảng điều khiển không hiển thị ở đâu khi tôi chạy ứng dụng của mình. Tôi có thể gỡ lỗi ứng dụng và Mainđiểm nhập cũng đang bị tấn công. Tôi cũng đã hoàn nguyên cài đặt tùy chọn được đề cập trong bài đăng này nhưng vô ích. Tôi đang sử dụng phiên bản cộng đồng VS 2017. Tôi bị mất cửa sổ bảng điều khiển của mình (nức nở).
RBT

3
Đối với những gì nó đáng giá, trong VS 15.8.7, cách duy nhất tôi có thể lấy đầu ra để chuyển hướng cho một ứng dụng bảng điều khiển là thay đổi nó thành một ứng dụng Windows và để lại hộp Chuyển hướng KHÔNG ĐƯỢC KIỂM TRA. Nếu tôi chọn hộp, nó không hiển thị đầu ra.
dpberry178

6

Sử dụng System.Diagnostics.Trace

Tùy thuộc vào những gì người nghe bạn đính kèm, đầu ra theo dõi có thể chuyển đến cửa sổ gỡ lỗi, bảng điều khiển, tệp, cơ sở dữ liệu hoặc tất cả cùng một lúc. Khả năng thực sự là vô tận, vì việc triển khai TraceListener của riêng bạn cực kỳ đơn giản.


Có, nhưng điều tôi muốn biết là có thể thực hiện được hay không mà không cần phải tự mình thực hiện.
elysium bị nuốt chửng vào

@devoured Lớp Trace chỉ xuất ra cửa sổ gỡ lỗi theo mặc định. Bạn chỉ cần đính kèm thêm các trình nghe (và có một số phần mềm đã được viết sẵn mà bạn có thể sử dụng) nếu bạn muốn xem đầu ra ở nơi khác.
Joel Coehoorn

1
Tôi đã đi đến hộp thoại Tùy chọn gỡ lỗi của mình và chọn "Chuyển hướng tất cả văn bản Cửa sổ đầu ra sang Cửa sổ ngay lập tức" để làm cho đầu ra Theo dõi chuyển đến cửa sổ Ngay lập tức để nó không bị trộn lẫn với thứ tào lao gỡ lỗi.
Gabe

2

Đã đến lúc kiểm tra / các bản phát hành mới nhất cho Visual Studio, các bạn. Giải pháp được đề xuất nhiều nhất không hoạt động với một số bạn trước đây có thể hoạt động bây giờ.

Trong Visual Studio 2017 ( Phiên bản phát hành 15.4.2 trở lên), sẽ Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Windowlàm việc cho tôi.

Một số lưu ý: 1. Để xem Cửa sổ ngay lập tức, hãy đảm bảo rằng bạn đang ở chế độ Gỡ lỗi . 2. Bây giờ sẽ có 3 công cụ gỡ lỗi khác có sẵn cho bạn sử dụng, đó là Call Stack, Breakpoints và Command Window, như được hiển thị bên dưới:

nhập mô tả hình ảnh ở đây

Lời chúc tốt nhất!


Đã thử nghiệm trong v15.9.4, không hoạt động (ít nhất là không dành cho ứng dụng bảng điều khiển).
bta

Hừ! Nếu bạn có thể chia sẻ ảnh chụp màn hình về các cấu hình của mình, tôi có thể thử khắc phục sự cố từ phía mình. Nếu không, bạn có thể chia sẻ giải pháp của mình nếu nó đã được giải quyết. Ghi chú phát hành cho Visual Studio 15.9.4 có sẵn tại docs.microsoft.com/en-us/visualstudio/releasenotes/… , bạn có thể tìm thấy một số mẹo hữu ích ở đó tùy thuộc vào môi trường của bạn. Tài liệu Visual Studio 2017 (Cửa sổ đầu ra) : docs.microsoft.com/en-us/visualstudio/ide/reference/…
kuzevni

Kiểm tra kỹ rằng dự án bạn đang thử nghiệm được tạo dưới dạng "ứng dụng bảng điều khiển", không phải "ứng dụng cửa sổ". Cách tiếp cận của bạn hoạt động với một ứng dụng windows, nhưng đó không phải là những gì OP chỉ định.
bta

1

Bạn có thể tạo một ứng dụng trình bao bọc mà bạn chạy thay vì chạy trực tiếp ứng dụng thực của mình. Ứng dụng wrapper có thể lắng nghe stdout và chuyển hướng mọi thứ đến Trace. Sau đó, thay đổi cài đặt chạy để khởi chạy trình bao bọc của bạn và chuyển đường dẫn đến ứng dụng thực để chạy.

Bạn cũng có thể có trình bao bọc tự động đính kèm trình gỡ lỗi vào quy trình mới nếu trình gỡ lỗi được gắn vào trình bao bọc.


0

Tôi biết đây chỉ là một câu trả lời khác, nhưng tôi nghĩ rằng tôi sẽ viết một cái gì đó cho các Nhà phát triển web mới, những người có thể nhầm lẫn về phần "Thay đổi thành ứng dụng Windows", vì theo mặc định, tôi nghĩ rằng một ứng dụng MVC trong Visual Studio 2013 mặc định là Loại đầu ra của Thư viện Lớp.

Ứng dụng Web của tôi theo mặc định được đặt làm kiểu đầu ra của "Thư viện lớp". Bạn không cần phải thay đổi điều đó. Tất cả những gì tôi phải làm là làm theo các gợi ý đi tới Công cụ> Tùy chọn> Gỡ lỗi> Chuyển hướng tất cả văn bản Cửa sổ đầu ra sang Cửa sổ ngay lập tức. Sau đó tôi sử dụng System.Diagnostics.Tracegợi ý của Joel Coehoorn ở trên.


0

Một giải pháp đơn giản phù hợp với tôi, hoạt động với khả năng của bảng điều khiển (ReadKey, String with Format và arg, v.v.) và để xem và lưu đầu ra:

Tôi viết TextWriter viết tới Consolevà tới Tracevà thay thế Console.Outbằng nó.

nếu bạn sử dụng Hộp thoại -> Gỡ lỗi -> Kiểm tra "Chuyển hướng Tất cả Văn bản Cửa sổ Đầu ra đến Cửa sổ Ngay lập tức", bạn nhận được nó trong Cửa sổ Ngay lập tức và khá sạch sẽ.

mã của tôi: ở đầu mã của tôi:

   Console.SetOut(new TextHelper());

và lớp học:

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

        }

    }

Lưu ý: Tôi chỉ ghi đè những gì tôi cần nên nếu bạn viết các loại khác, bạn nên ghi đè nhiều hơn


0

liên quan đến việc System.Diagnostics.Debugtạo ra nhiều "rác" trong cửa sổ Đầu ra: Bạn có thể tắt điều đó bằng cách nhấp chuột phải vào cửa sổ đầu ra. Ví dụ: có một mục "Thông báo tải mô-đun" mà bạn muốn tắt và một mục "Đầu ra chương trình" mà bạn muốn giữ lại.


0

Bạn có ba khả năng để làm điều này, nhưng nó không phải là tầm thường. Ý tưởng chính của tất cả các IDE là tất cả chúng đều là cha mẹ của các tiến trình con (gỡ lỗi). Trong trường hợp này, có thể thao tác với đầu vào, đầu ra và trình xử lý lỗi chuẩn. Vì vậy, các IDE khởi động các ứng dụng con và chuyển hướng ra cửa sổ đầu ra bên trong. Tôi biết về một khả năng nữa, nhưng nó sẽ đến trong tương lai

  1. Bạn có thể triển khai công cụ gỡ lỗi của riêng mình cho Visual Studio. Debug Engine kiểm soát khởi động và gỡ lỗi cho ứng dụng. Ví dụ cho điều này, bạn có thể tìm thấy cách thực hiện việc này trên docs.microsoft.com ( Visual Studio Debug engine )
  2. Chuyển hướng ứng dụng biểu mẫu bằng cách sử dụng sao chép trình xử lý std cho c ++ hoặc sử dụng Console.SetOut (TextWriter) cho c #. Nếu bạn cần in vào cửa sổ xuất, bạn cần sử dụng SDK mở rộng Visual Studio. Ví dụ về biến thể thứ hai mà bạn có thể tìm thấy trên Github .
  3. Khởi động ứng dụng sử dụng System.Diagnostics.Debug.WriteLine (để in thành đầu ra) và sau đó nó sẽ khởi động ứng dụng con. Khi bắt đầu có một đứa trẻ, bạn cần chuyển hướng stdout thành cha mẹ với các đường ống. Bạn có thể tìm thấy một ví dụ trên MSDN. Nhưng tôi nghĩ đây không phải là cách tốt nhất.

0

Nếu bạn cần đầu ra từ Console.WriteLine và Redirect Tất cả Output Window Text to Window Ngay lập tức không làm chức năng và bạn cần phải biết đầu ra của thử nghiệm từ Integrated thử nghiệm Explorer, sử dụng NUnit.Framework vấn đề của chúng tôi đã được giải quyết tại VS 2017 :

Ví dụ được lấy từ C # In Depth của Jon Skeet: Ví dụ được lấy từ C # In Depth của Jon Skeet Điều này tạo ra kết quả này tại Text Explorer: Trình khám phá tác vụ

Khi chúng ta nhấp vào Đầu ra màu xanh lam, trong Thời gian đã trôi qua, ở bên phải, và nó tạo ra điều này: Đầu ra tiêu chuẩn

Đầu ra Chuẩn Đầu ra mong muốn của chúng tôi, do Console.WriteLine sản xuất.

Nó hoạt động cho Bảng điều khiển và cho Ứng dụng Biểu mẫu Windows tại VS 2017, nhưng chỉ cho Đầu ra được tạo cho Trình khám phá thử nghiệm lúc Gỡ lỗi hoặc Chạy; Dù sao, đây là nhu cầu chính của tôi về đầu ra Console.WriteLine.


-1

Thay vào đó, bạn có thể thu thập kết quả đầu ra trong một kết quả thử nghiệm.

Bạn không thể cung cấp đầu vào, nhưng bạn có thể dễ dàng cung cấp một số thử nghiệm với các đối số dòng lệnh khác nhau, mỗi thử nghiệm thu thập đầu ra.

Nếu mục tiêu của bạn là gỡ lỗi, đây là một cách tốn ít công sức để đưa ra một kịch bản gỡ lỗi có thể lặp lại.

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

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

-7

Bước 1: Nhấp chuột phải vào Tên dự án trong Giải pháp Explorer, sau đó tạo loại Đầu ra là Ứng dụng cửa sổ

Bước 2: Gỡ lỗi -> Tùy chọn ..--> Gỡ lỗi (Mở rộng) -> Chung -> Chuyển hướng Tất cả Văn bản Cửa sổ Đầu ra đến Cửa sổ Ngay lập tức


3
Câu trả lời này đã được đưa ra ba lần trước đây. Nó không giải quyết câu hỏi được hỏi.
Klay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.