gpt4 book ai didi

c# - Visual Studio 在调试结束时清除输出文件

转载 作者:太空狗 更新时间:2023-10-29 23:31:11 26 4
gpt4 key购买 nike

我遇到了 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 选项卡中,我已将输出重定向到一个文件,如下所示: command line options

如果我在我的应用程序仍在运行时的 10 秒内打开该文件,该文件确实包含“Hello world!”。但是,一旦程序退出,文件就会被清除。当我从命令行运行程序时,不会发生这种情况。

Visual Studio 这样做有什么理由吗?有没有办法绕过这种行为?

最佳答案

我认为这是由于 Visual Studio 托管您的应用程序的方式所致,目的是减少调试时的启动时间。

实际情况是您的应用程序 (Program.exe) 将托管在另一个进程 (Program.vshost.exe) 中,该进程使用相同的命令行参数启动。当您的应用程序结束时,此过程会立即重新启动。您应该能够在任务管理器中看到这一点 - 查看详细信息选项卡,以便您可以看到进程的 PID,然后运行您的应用程序 - 您将看到一个 Program.vshost.exe 实例,该实例在您的应用程序完成时结束,并且另一个立即出现。然后将覆盖您的输出文件。

解决此问题的一个方法是为您的应用程序提供一个命令行参数,供要写入的文件使用 - 并在您的 Main 方法中打开该文件。在您再次开始运行该应用程序之前,您不会到达那里。

另一种选择是简单地停止使用托管进程 - 在项目属性的“调试”部分,您应该在底部看到“启用 Visual Studio 托管进程”复选框。取消选中此项,我认为您的问题就会消失 - 但开始调试需要更长的时间。

参见 this blog post有关托管过程的更多信息。

关于c# - Visual Studio 在调试结束时清除输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23997129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com