首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventSource .net 4.0 GenerateManifest

EventSource .net 4.0 GenerateManifest
EN

Stack Overflow用户
提问于 2013-09-20 09:33:03
回答 3查看 3.7K关注 0票数 3

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

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

下面是我为我的应用程序生成事件而编写的代码。

代码语言:javascript
复制
[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);
    }
}

我无法从侦听器中生成显式。代码如下

代码语言:javascript
复制
var manifestXml = EventSourceLogger.GetManifest();

当我试图叫它我得到NullReferenceException,请建议我错过任何东西。是否可以使用此版本将EventMessage推送到EventViewer。

作为这个NuGet包的一部分,我有eventRegister,安装Bat,NuGet我不太确定这些如何在显式生成中有所帮助。

如果有人有任何想法(或)在这方面工作,请帮助。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-25 11:00:22

我找到了解决办法。现在,我能够注册事件并将事件发布给事件查看器。

http://naveensrinivasan.com/2010/03/17/using-clr-4-0-event-tracing-for-windows-etw-along-with-application-etw/

谢谢。

票数 0
EN

Stack Overflow用户

发布于 2015-11-21 00:07:55

@magicandre1981的答案是正确的,因为没有必要用更新版本的.NETEventSource生成清单。(实际上,它仍然在发生,但它只是隐藏在构建事件的后面,当您安装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类都有两个文件:

  • {前缀}{EventSource名称}.etwManifest.dll
  • {前缀}{EventSource名称}.etwManifest.man

这些就是你可以提供给维夫图

代码语言:javascript
复制
wevtutil.exe 
   im {EtwManifestManFile} 
   /rf:"{EtwManifestDllFile}" 
   /mf:"{EtwManifestDllFile}"
票数 8
EN

Stack Overflow用户

发布于 2013-09-20 19:51:50

你不需要再拿到申报单了。现在可以直接注册EventSource:

注册您的EventSource 安装EventSource NuGet包时,前面提到的构建步骤为应用程序中的每个EventSource生成以下文件: AssemblyName.EventSourceTypeName.etwManifest.man AssemblyName.EventSourceTypeName.etwManifest.dll. 这些文件需要在操作系统中注册,以启用通道支持。为此,在文件位于其最终部署位置后运行以下命令: wevtutil.exe im EtwManifestManFile /rf:"EtwManifestDllFile"c /mf:"EtwManifestDllFile“

微软在这个博客中解释了这一点:

宣布EventSource NuGet包-写入Windows

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18913364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档