簡體   English   中英

Visual Studio在調試結束時清除輸出文件

[英]Visual Studio clears output file at end of debugging

我在Visual Studio 2013中遇到了一個奇怪的行為。我有一個C#程序寫入標准輸出,讓我們說

using System;
using System.Threading;

namespace CsSandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello world!");
            Thread.Sleep(10000);
        }
    }
}

在項目屬性的Debug選項卡中,我已將輸出重定向到文件,如下所示: 命令行選項

如果我在應用程序仍在運行時在這些10s內打開文件,則該文件確實包含“Hello world!”。 但是,一旦程序退出,文件就會被清除。 從命令行運行程序時不會發生這種情況。

有沒有理由為什么Visual Studio會這樣做? 有沒有辦法繞過這種行為?

我相信這是由於Visual Studio托管您的應用程序的方式,以減少調試時的啟動時間。

發生的情況是您的應用程序(Program.exe)實際上將托管在另一個進程(Program.vshost.exe)中,該進程以相同的命令行參數啟動。 當您的應用程序結束時,立即重新啟動此過程。 您應該能夠在任務管理器中看到這一點 - 查看詳細信息選項卡,以便您可以看到進程的PID,並運行您的應用程序 - 您將看到一個Program.vshost.exe實例,該實例在您的應用程序完成時結束,並且另一個人立即上來。 然后,這將覆蓋您的輸出文件。

解決此問題的一個方法是為應用程序提供要寫入的文件的命令行參數 - 並在Main方法中打開該文件。 在您再次開始運行應用程序之前,您將無法到達那里

另一種選擇是簡單地停止使用托管過程 - 在項目屬性的Debug部分中,在底部你應該看到一個“啟用Visual Studio托管過程”的復選框。 取消選中此項,我認為您的問題將會消失 - 但開始調試需要更長時間。

有關托管過程的更多信息,請參閱此博客文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM