【问题标题】:Why does my .NET Console Application exit without running Main?为什么我的 .NET 控制台应用程序在不运行 Main 的情况下退出?
【发布时间】:2011-12-26 10:53:52
【问题描述】:

我刚刚打开了几年前部署的控制台应用程序的源代码,该应用程序每天在我们的服务器上作为 Windows 计划任务运行两次(它会更新数据库中的某些内容)。部署时运行良好,但现在我们需要进行一些代码更改。我尝试在 Debug 中运行它,程序甚至不会进入 sub main。它击中了线

static void Main(string[] args) 并且刚刚结束运行。控制台窗口消失。我没有从客户那里听说生产版本没有运行,但是当我检查他们的服务器时,我没有看到我应该看到的事件日志条目(应用程序应该在每次运行时写入事件日志)

【问题讨论】:

  • 您在“输出”窗口中看到了什么?
  • 它是为哪个版本的 .NET 编写的?它正在运行和失败的机器上正在运行哪些版本?
  • 您在调试器中看到异常了吗?
  • 我正在使用 .NET 4.0 (Visual Studio 2010)。它正在使用的机器可能运行多个版本,但我不确定。
  • 调试器中没有异常。它只是完全运行结束。

标签: .net vb.net console-application main


【解决方案1】:

如果您在运行应用程序的机器上没有正确版本的 .NET 框架,我也看到过这种情况。 也许你在重新编译时更改了目标框架版本。

【讨论】:

  • 检查您的 app.config。查找这一行:supportedRuntime version="v4.0" sku=".NETFramework,Version= 确保 "Version=" 之后的任何内容对于您正在运行的位置都是合法的。
【解决方案2】:

这可能是一个 DLL 问题。

如果 Main() 使用 JITter 无法找到的程序集中的类型,则程序将在命中 Main() 之前终止。
如果包含 Main() 的类型具有无法加载的类型的字段,也会发生这种情况。

如果该类型的静态构造函数调用Environment.FailFast(),也会发生这种情况。

【讨论】:

  • 如果您使用自己的 Main 方法创建第二个空类,该类仅在 try-catch 块中调用原始 Main ,则可能更容易调试。然后将第二个类设置为启动类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
相关资源
最近更新 更多