为什么我的控制台应用程序没有显示控制台?

3

非常奇怪的问题...我的解决方案中有两个控制台应用程序,控制台应用程序1在我运行它并将其设置为启动项目时显示控制台...控制台应用程序2在运行、执行时不显示控制台。

以下是代码:

public class Program
    {
        static void Main()
        {
            string baseAddress = "http://localhost:8080/";

            using (WebApp.Start<StartUp>(url: baseAddress))
            {
                Console.Write("Service Listening at : " + baseAddress);
                System.Threading.Thread.Sleep(-1);
            }
        }
    }

这里是StartUp类。
 public class StartUp
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.EnableCors();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional });
            config.Formatters.Clear();
            config.Formatters.Add(new JsonMediaTypeFormatter());
            config.Formatters.JsonFormatter.SerializerSettings =
            new JsonSerializerSettings
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            };
            appBuilder.UseWebApi(config);
        }
    }

3
你是否在调试器中运行该应用程序,以查看它是否触发了Console.Write? - mrogers
是的,我有,并且它确实起作用了,最初它能够正常工作,但后来我对启动项进行了更改并重新构建后,它就无法正常工作了。 - Paul T. Rykiel
展示给我们两个控制台应用的代码。 - user585968
你确定这两个项目都配置为“控制台应用程序”吗?PE可执行文件头中有一个标志,告诉Windows在程序启动时显示控制台窗口。如果未设置该标志,则不会显示任何窗口,这就是为什么Notepad在运行时不显示控制台窗口,但cmd.exe会显示的原因。 - Dai
在您的项目属性窗口中,找到“输出类型”选项。@PaulT.Rykiel - Dai
显示剩余2条评论
3个回答

11

尝试关闭 Visual Studio 并重新打开

或许其他人也会从这个解决方法中受益,因为我遇到了同样的问题。

这个问题在我使用 IIS Express 调试 ASP.Net Core 项目之后出现。我关闭了 ASP.Net Core 解决方案,然后打开了 Console 应用程序解决方案,但控制台没有显示出来。所以我关闭了 Visual Studio,再次打开解决方案,这时控制台就出现了。

我使用的是 Visual Studio Professional 2017 版本15.9.20。


对我来说很有效!! - undefined

3
启动设置可能已经设置为IIS Express。转到项目属性>调试并将启动设置更改为项目。确保在标准工具栏上将调试目标也设置为该项目。

Debug Target


1
一个控制台应用程序将在Main方法返回时终止,除非一个子线程被标记为前台线程。可能你的程序运行得非常快,以至于你从未看到控制台窗口被显示。

WebApp.Start不是一个阻塞的方法,你的Main方法中后续的调用也不是阻塞的。

只需在“Service listening”消息之后添加一个Console.ReadLine()调用即可。因为你的代码不是在协作多任务环境中运行,所以没有必要使用Thread.Sleep(-1)


它为什么“不工作”?你有观察到相同的行为吗? - Dai
我输入了 Console.ReadLine();,去掉了 Thread.Sleep(-1); ... 按下 cmd 5,它直接进入调试模式 ... 但没有窗口。 - Paul T. Rykiel
4
我有略微不同的症状 - 在调试时我看到了控制台,在没有调试时我没有看到它,但是 dotnet.exe 进程是可见的,而且如果不结束进程就无法编译应用程序。 重启 Visual Studio 后一切正常。 - Andrzej Martyna
5
@AndrzejMartyna,当我按下F5运行控制台应用程序后,VS没有显示控制台窗口,我遇到了问题。但是重新启动了VS后,问题得到了解决,非常感谢您。在您发布之前,我甚至没有考虑过重新启动VS。 - oleksa
1
Visual Studio 重新启动也对我有帮助。在 System.Web.Mvc nuget 包更新后出现了这个问题。 - Yehor Androsov
Visual Studio 重新启动后也解决了我的问题。简单的答案是:感谢您致电技术支持,您尝试过重新启动吗? - WernerCD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接