Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET程序中解析TraceSource名称?_C#_.net_App Config_Tracesource - Fatal编程技术网

C# 如何在.NET程序中解析TraceSource名称?

C# 如何在.NET程序中解析TraceSource名称?,c#,.net,app-config,tracesource,C#,.net,App Config,Tracesource,TraceSource类的MSDN文档举例说明了app.config文件如何列出TraceSource实例的信息: 但是,没有关于TraceSource值存储在何处的信息…现有TraceSource对象存储在何处?何时构造它们(编辑:它们表示配置的实例)?在创建TraceSource对象时,TraceSource对象如何知道如何返回命名实例(编辑:应配置为实例)而不是新实例?我可以在不使用反射的情况下找到现有TraceSource对象的列表吗?TraceSource类保留源的私有列表。但除了T

TraceSource类的MSDN文档举例说明了app.config文件如何列出TraceSource实例的信息:


但是,没有关于TraceSource值存储在何处的信息…现有TraceSource对象存储在何处?何时构造它们(编辑:它们表示配置的实例)?在创建TraceSource对象时,TraceSource对象如何知道如何返回命名实例(编辑:应配置为实例)而不是新实例?我可以在不使用反射的情况下找到现有TraceSource对象的列表吗?

TraceSource类保留源的私有列表。但除了TraceSource类本身之外,任何人都无法访问它

.config文件部分用于配置跟踪源的侦听器。因此,当您在代码中创建TraceSource时,它将使用您在构造函数中传递的名称,并在.config文件中查找应自动添加或删除的侦听器

因此,代码创建源代码,而.config文件配置它。相反,.config文件无法创建源

是否存储TraceSource对象

在静态集合中(每个应用程序域一个副本),但在.NET版本中,它们与weakreference一起存储,如果创建太多,则可能导致内存泄漏。如果我没记错的话,mono版本没有这个问题

关于细节,我建议阅读源代码——Mono源代码更容易追踪,因为它们是正式开放的

它们是什么时候建造的

当正在写入跟踪的应用程序写入TraceSource source=new TraceSource()时

在创建TraceSource对象时,TraceSource对象如何知道如何返回命名实例而不是新实例

不确定

我是否可以在不使用反射的情况下找到现有TraceSource对象的列表


过去可以用红门反射器来实现这一点。System.Net和WCF库使用Systems.Diagnostics,但很少有其他库使用Systems.Diagnostics。API中没有一种方法可以对当前跟踪源的运行时进行互操作,这将是一个很好的功能。

小点:TraceSource是.NET的一部分,因此这适用于任何.NET程序。没错,它们是.NET功能,不是C#one。您仍然可以在这里找到使用
TraceSource
的类列表。您是否有任何类型的文档的链接来描述这一点?您知道为什么M$决定在类中保留现有或配置的TraceSources的名称为私有吗?IMHO,这似乎是一个自找麻烦的设计决策——如果代码中的某个位置创建了一个与现有实例或app.config文件中配置的实例同名的TraceSource实例,那么跟踪将重叠。为什么不可以查询名称是否存在?@Matt trace有许多使用场景,本例中的设计者将trace的目标对准了编写和跟踪自己代码的开发人员。在某些情况下,服务器管理员或第三方库用户可能希望查看跟踪,但Systems.Diagnostics缺少一些功能,例如发现跟踪资源。另一方面,它是一个众所周知的API,所以一旦发现了侦听器,连接侦听器就不需要重新编译或访问源代码——所以有赢有输,没有重叠。同样,该名称仅用于选择侦听器,而不是源。拥有多个同名的TraceSource是非常合理的,它允许创建在多个类中生成输出的私有跟踪源。这可能正是您想要此功能的原因。我不同意“无重叠”的说法。app.config文件中命名的TraceSources的TraceListener将重叠,这令人困惑。如果我写
TraceSource tsOne=newTraceSource(“NamedSource”)在一个函数中,并且
TraceSource tsTwo=新的TraceSource(“NamedSource”)
在另一个中,
tsOne
tsTwo
将具有相同(即重叠)的侦听器,如果app.config文件中有“NamedSource”(通过VS2012确认)。即使在跟踪单个程序中的代码时,我认为对于具有一个名称但预期侦听器不同的TraceSource来说,危险太大了。显然,我缺乏想象力,无法理解为什么希望具有相同名称的源具有不同的侦听器。只需创建一个工厂类来创建TraceSource对象,并将它们保存在列表中,以便您可以找到它们。否则,我不明白当你找到一个回来时你会做什么,所以我只能建议你这么做。你有一个官方M$文档的链接来描述上面的细节,还是你随机复制了源代码并查看了它?:)这是一份副本:以下是合法查看的方法: