小编JDE*_*JDE的帖子

为什么一些大型项目编译成小型程序集?

例如,着名库HtmlAgilityPack源的最后一个版本类似于110 000行C#,并且程序集为132 KB.

https://www.openhub.net/p/htmlagilitypack

我的项目大约是6500行,编译成300 KB的程序集.

我没有广泛关注源代码,但显然不是100K loc可用类.那么大量的代码在做什么呢?

.net c#

7
推荐指数
1
解决办法
173
查看次数

C#跟踪截断长消息

在C#中,我启用了跟踪和网络跟踪源.

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.diagnostics>
    <sources>
      <source name="System.Net" tracemode="includehex" maxdatasize="1024">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Verbose"/>
    </switches>
    <sharedListeners>
      <add name="System.Net"
        type="TraceTest.StringWriterTraceListener, TraceTest"
        initializeData="myfile.log"
      />
    </sharedListeners>
    <trace autoflush="true" indentsize="4" />    
  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

但是更长的消息被截断(长度像12Kb/30行,不长就像1GB!)所以我最终会遇到只记录部分web reqiest标头的情况.

如何解决?

或者您是否知道一本书或一些资源可以非常详细地解释.Net跟踪和调试?

日志示例:

            System.Net Information: 0 : [1204] Connection#63291458 - Received headers
        {
        Transfer-Encoding: chunked
        Connection: keep-alive
        Keep-Alive: timeout=10
        Content-Type: text/html; charset=windows-1251
        Date: Mon, 04 Jul 2016 17:50:33 GMT
        Set-Cookie: uid=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; …
Run Code Online (Sandbox Code Playgroud)

c#

5
推荐指数
1
解决办法
397
查看次数

C#在运行时启用/禁用网络跟踪?

在示例中,我可以发现通过配置文件启用了跟踪,例如

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.diagnostics>
    <sources>
      <source name="System.Net" tracemode="includehex" maxdatasize="1024">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Verbose"/>
    </switches>
    <sharedListeners>
      <add name="System.Net"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="network.log"
      />
    </sharedListeners>
    <trace autoflush="true" indentsize="4" />    
  </system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

但是我不希望dll附带配置文件。此外,我需要能够启用/禁用跟踪并在代码中“即时”更改日志名称。我想到的是:

FileStream stream = new FileStream("D:\\network1.log", FileMode.OpenOrCreate);
TextWriterTraceListener listener = new TextWriterTraceListener(stream);
Trace.Listeners.Add(listener);
Trace.AutoFlush = true;

TraceSwitch ts = new TraceSwitch("System.Net", ".Net");
ts.Level = TraceLevel.Verbose;
Run Code Online (Sandbox Code Playgroud)

而且它没有记录任何内容,而且我也不知道将开关添加到何处,如果这是正确的话。侦听器可以工作,但不会获取任何数据。

我一直在阅读msdn和这篇博客文章http://www.codeguru.com/csharp/.net/article.php/c19405/Tracing-in-NET-and-Implementing-Your-Own-Trace-Listeners.htm从我的理解来看,添加到Trace.Listeners侦听器后应该将所有thace信息记录在当前exe中,但是显然不是这样。

那么如何实现呢?

编辑:我已经设法通过拆解TextWriterTraceListener并用反汇编的代码实现我自己的TraceListener来解决这个限制,在Write和WriteLine方法中添加是否检查了另一个类的某些静态字段的变量,并在配置中添加了我的类型。

c#

3
推荐指数
1
解决办法
1063
查看次数

标签 统计

c# ×3

.net ×1