2011-05-17 5 views
14

Trabajo con muchas consultas de Linq en mi código, y estoy buscando una biblioteca que proporcione una función de formateo Dump() similar a la que ofrece LinqPad. El método de extensión Dump() de LinqPad es realmente bastante bueno, porque maneja muy bien las colecciones anidadas.¿Hay una biblioteca que proporcione una función de formateo Dump() como LinqPad?

Idealmente, imprimirá lindas tablas en texto sin formato, pero estaría bien con escupir HTML u otros datos muy formateados.

La muestra ObjectDumper de VS no se corta en absoluto.

+0

Posiblemente quiera esto: http://msdn.microsoft.com/en-us/library/bb397968(v=vs.90).aspx – Darragh

Respuesta

20

Esto es lo que he estado usando:

Special thanks to this thread (especially Pat Kujawa's & anunay's comments)

C# (Directamente desde el comentario de la patente Kujawa (aunque lo hice volver en sí de modo que las cadenas como la versión de LINQPad hace)):

public static T Dump<T>(this T o) { 
    var localUrl = Path.GetTempFileName() + ".html"; 
    using (var writer = LINQPad.Util.CreateXhtmlWriter(true)) 
    { 
     writer.Write(o); 
     File.WriteAllText(localUrl, writer.ToString()); 
    } 
    Process.Start(localUrl); 
    return o; 
} 

VB (mi conversión ya que necesitaba en una aplicación VB):

Public Module LinqDebugging 
    <System.Runtime.CompilerServices.Extension()> 
    Public Function Dump(Of T)(ByVal o As T) As T 
     Dim localUrl = Path.GetTempFileName() + ".html" 
     Using writer = LINQPad.Util.CreateXhtmlWriter(True) 
      writer.Write(o) 
      File.WriteAllText(localUrl, writer.ToString()) 
     End Using 
     Process.Start(localUrl) 
     Return o 
    End Function 
End Module 

Usted tendrá que añadir el ejecutable LINQPad como referencia en su proyecto, así como System.IO y System.Diagnostics

Se lanzará el navegador web por defecto que muestra la salida exacta que LINQPad generaría.

+7

Para hacer referencia a LINQPad.exe más fácil, ahora hay cualquier compilación AnyCPU para ambos las construcciones de Framework 3.5 y 4.0: www.linqpad.net/beta.aspx –

+0

Me pregunto si el uso de este método de volcado dentro de tu propio código viola til eula? De [LINQPad EULA] (http://www.linqpad.net/eula.txt): Uso Puede redistribuir una versión modificada del LINQPad ejecutable con una aplicación o una biblioteca comercial o no comercial para el único propósito de permitir a los usuarios finales ejecutar LINQPad. La redistribución para otros fines requiere un permiso por escrito del licenciante. – Nikolaj

+1

Recomendaría solo el uso de esta función para problemas de depuración. Cada vez que creamos el producto final, LINQPad aparece como "no incluir" en las referencias del proyecto. – diceguyd30

4

Como señalaguijod30, en realidad puedes acceder al ejecutable de LINQPad directamente en tu código y hacer que produzca el HTML. Esto funcionaría mejor si está tratando de enviar el HTML a la interfaz como parte de la ejecución normal de su programa.

Si su propósito es producir datos de depuración que pueda monitorear mientras se ejecuta su programa, otra opción es usar el método Console.Write(object), y luego establecer su Console.Out en algo que pueda formatear objetos inteligentemente. Por ejemplo, puede hacer referencia a su ejecutable desde LINQPad, y usarlo para ejecutar un método que está depurando, y LINQPad tratará cualquier llamada Console.WriteLine(object) de la misma manera que llamaría al object.Dump().

Cuestiones relacionadas