EventSource .net 4.0 GenerateManifest

KRP*_*KRP 3 system.diagnostics etw .net-4.0 event-log etw-eventsource

我一直在尝试在.net 4.0中使用ETW.

我已经开始使用Microsoft EventSource Library 1.0.4-beta(https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.EventSource)

这是我为我的应用程序生成事件而编写的代码.

[EventSource(Name = "Samples-EventSourceDemos-EventSourceLogger")]
public sealed class EventSourceLogger : EventSource
{
    public static EventSourceLogger Log = new EventSourceLogger();

    public static string GetManifest()
    {
        return GenerateManifest(typeof(EventSourceLogger), null);
    }

    [Event(200, Level = Microsoft.Diagnostics.Tracing.EventLevel.Informational, Task = EventTask.None, Version = 1,
        Opcode = EventOpcode.Info, Keywords = EventKeywords.None, Channel = EventChannel.Admin,
        Message = "Test Message")]
    public void LogEtwInfoEventMessage(string jsonArgs)
    {
        if (!this.IsEnabled()) return;

        this.WriteEvent(200, jsonArgs);
    }

    [Event(400, Level = Microsoft.Diagnostics.Tracing.EventLevel.Error, Task = EventTask.None, Version = 1,
        Opcode = EventOpcode.Info, Keywords = EventKeywords.None, Channel = EventChannel.Admin, Message = "Test Message")]
    public void LogEtwErrorEventMessage(string jsonArgs)
    {
        if (!this.IsEnabled()) return;

        this.WriteEvent(400, jsonArgs);
    }

    [Event(500, Level = Microsoft.Diagnostics.Tracing.EventLevel.Warning, Task = EventTask.None, Version = 1,
       Opcode = EventOpcode.Info, Keywords = EventKeywords.None, Channel = EventChannel.Admin, Message = "Test Message")]
    public void LogEtwWarningEventMessage(string jsonArgs)
    {
        if (!this.IsEnabled()) return;

        this.WriteEvent(500, jsonArgs);
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法从侦听器生成清单.代码如下

var manifestXml = EventSourceLogger.GetManifest();
Run Code Online (Sandbox Code Playgroud)

当我尝试调用它时,我得到NullReferenceException,请建议我遗漏任何东西.是否可以使用此版本将EventMessage推送到EventViewer.

作为这个NuGet包的一部分,我有eventRegister,Install Bat,Microsoft.Diagnostics.Tracing.EventSource.targets.我不确定这些如何有助于显示生成.

如果任何人对此有任何想法(或),请帮助.

提前致谢.

Nik*_* G. 8

@ magicandre1981的答案是正确的,因为没有必要使用更新版本的.NET和生成清单EventSource.(事实上​​,它仍然存在,但它只是隐藏在构建事件后面,当你安装EventSource包时,它会被放入你的项目文件中.)

但是,根据您正在执行的操作,您可能仍需要手动生成清单.这是一种方法:

  1. EventSource包(Install-Package Microsoft.Diagnostics.Tracing.EventSource)安装到项目中或下载并在需要的地方解压缩
  2. 找到eventRegister.exe.(它很可能是在packages\Microsoft.Diagnostics.Tracing.EventRegister.1.1.26\build相对于包安装文件夹的文件夹下的某个位置)
  3. 运行以下命令:

eventRegister.exe {path-to-dll-with-your-eventsource-class} {manifest-output-file-prefix}

之后,您将在dll中看到每个EventSource类的两个文件:

  • {prefix} {EventSource Name} .etwManifest.dll
  • {prefix} {EventSource Name} .etwManifest.man

那些是你可以接受的

wevtutil.exe 
   im {EtwManifestManFile} 
   /rf:"{EtwManifestDllFile}" 
   /mf:"{EtwManifestDllFile}"
Run Code Online (Sandbox Code Playgroud)