到目前为止,我的所有代码都可以正常工作:

using System.Diagnostics;

namespace WebPortalLogging
{
    public static class EventLogging
    {
    public static void LogEvent(string origin, string message, EventLogEntryType eventLogEntryType, int eventId)
        {
      const string source = "Software";
            const string log = "Application";

            if (!EventLog.SourceExists(source))
                 EventLog.CreateEventSource(source, log);
      EventLog.WriteEntry(source, message, eventLogEntryType, eventId);
        }
    }
}

我什至在另一个项目中使用了这个类,它工作正常。当它碰到这一行时:

如果 (!EventLog.SourceExists(source))
EventLog.CreateEventSource(source, log);

它击中这条线并退出。

这是我的输出中的内容:
The thread 'vshost.NotifyLoad' (0x28c) has exited with code 0 (0x0).
The thread 'vshost.LoadReference' (0x470) has exited with code 0 (0x0).
'VmBackup.vshost.exe' (Managed (v4.0.30319)): Loaded 'D:\Google Drive\Code\VMBackup\VMBackup\bin\Debug\VmBackup.exe', Symbols loaded.
'VmBackup.vshost.exe' (Managed (v4.0.30319)): Loaded 'D:\Google Drive\Code\VMBackup\VMBackup\bin\Debug\WebPortalLogging.dll', Symbols loaded.
The thread '<No Name>' (0xa44) has exited with code 0 (0x0).
'VmBackup.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
The thread '<No Name>' (0x107c) has exited with code 0 (0x0).
The thread '<No Name>' (0x1838) has exited with code 0 (0x0).
The thread 'vshost.RunParkingWindow' (0xa78) has exited with code 0 (0x0).
The thread '<No Name>' (0x10e0) has exited with code 0 (0x0).
The program '[6436] VmBackup.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[6436] VmBackup.vshost.exe: Managed (v4.0.30319)' has exited with code 0 (0x0).

它没有到达 EventLog.WriteEntry。它也不输出到事件日志。我重新启动了 VS2010 并没有帮助。我在打开所有错误时都有提示。

我错过了什么?

最佳答案

首先,我会在您的条件周围使用大括号,因为如果 EventLog 没有源,则 EventLog 是否应该写入条目有点不清楚。

if (!EventLog.SourceExists(source))
{
   EventLog.CreateEventSource(source, log);
}

  EventLog.WriteEntry(source, message, eventLogEntryType, eventId);

还尝试将其包装在 try/catch 块中,以查看是否有任何未处理的异常导致程序随机退出。
try {

     if (!EventLog.SourceExists(source))
     {
           EventLog.CreateEventSource(source, log);
     }

     EventLog.WriteEntry(source, message, eventLogEntryType, eventId);

} catch (Exception e)
  {
     Console.WriteLine(e);
  }

附加:线程 'vshost.NotifyLoad' (0x28c) has exited with code 0 (0x0)
线程 'vshost.LoadReference' (0x470) has exited with code 0 (0x0) 。不是错误。 Visual Studio 告诉您后台线程已退出。 0 表示线程成功运行。

关于c# - 到达代码,不执行并无错误退出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12803640/

10-11 18:21