2011-03-24 17 views
21
public static class Extensions{ 
public static void Dump<T>(this T o) { } 
public static void Dump<T>(this T o, string s) { }} 

Estas líneas permiten que copie forma de código LINQPad a VS y ejecutarlo sin comentar a cabo cada línea con .dump() pero no es suficiente ... http://code.google.com/p/linqpadvisualizer/ - no muy cómodo :(LINQPad en Visual Studio

el mejor resultado me sale en busca de LINQPad en este VS es site con código de abajo por Pat Kujawa.

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

pero de error 1 el nombre 'LINQPad' no existe en el contexto actual

No pude encontrar ningún LINQPad.dll en la red

Respuesta

24

No es un dll para LINQPad que necesita hacer referencia sino el propio LINQPad.exe.

Haga clic derecho en su proyecto en Visual Studio -> Agregar referencia -> Busque la ubicación del archivo binario exe que se encuentra típicamente en su directorio de instalación C:\Program Files\LINQPad\ -> seleccione LINQPad.exe.

Una vez hecho esto, entonces se puede añadir una "directiva using", ya que en su archivo:

using System.Diagnostics; 
using System.IO; 
using LINQPad; 

El método LINQPad.Util.CreateXhtmlWriter ahora estará disponible para su uso.

+2

No tenía idea de que pudiera hacer referencia a los archivos .exe. Gracias. –

+3

@Przemyslaw Un ensamblaje es un ensamblaje. – Jeremy

15

Además de las respuestas dadas anteriormente, encontré una solución simple para realizar una depuración "in situ" dentro de Visual Studio (2015).


Preparación

  1. Como escribió Ray Vega, agregue una referencia a la versión x86 (recuerde Visual Studio todavía no es de 64 bits!) De LINQPad (es decir Agregar referencia ->Busque en la ubicación del archivo binario exe que se encuentra normalmente en su directorio de instalación C: \ Program Files \ LINQPad \ -> seleccione LINQPad.exe.)

  2. En el ámbito en el que desea utilizar volcado, añadir:

    public static dynamic dump = LINQPad.Util.CreateXhtmlWriter(); 
    
  3. Para volcar, añadir a su código en el que necesita un vertedero:

    dump.Write(obj); // obj = the object to dump 
    
  4. Añadir puntos de interrupción cuando sea necesario.

Nota: Si requiere compatibilidad con el LINQPad .dump() método, se declaran los siguientes pasos en lugar de 2. y 3 .:

public static class DumpExtension 
{ 
    private static dynamic dump = LINQPad.Util.CreateXhtmlWriter(); 
    public static T Dump<T>(this T objToDump) 
    { 
     dump.Write(objToDump); 
     return objToDump; 
    } 
} 

En este caso, el lugar el punto de interrupción en la línea donde está la instrucción return objToDump.


Visualización

En la ventana de inspección, añadir

dump.ToString() 

Haga clic en el icono catalejo y seleccione "HTML visualizador". HtmlVisualizer

Cuando se golpea un punto de interrupción, puede hacer clic en el catalejo y en la ventana emergente que se abre puede ver el volcado procesado (tal como lo vería en LinqPad).

DumpExample

En este ejemplo, la expresión

 dump.Write(new string[] { "a", "b" }); 

o (si se prefiere la otra sintaxis utilizando el método de extensión se ha mencionado anteriormente)

 (new string[] { "a", "b" }).Dump(); 

se prestados.

Tenga en cuenta que

  • porque estamos usando dynamic, a veces es necesario añadir explícitamente Microsoft.CSharp a las referencias del proyecto o se obtendrá un mensaje de error. Ver discusión here.
  • necesita .NET Framework 4.5.2 o superior, las versiones de marco inferiores no funcionarán
  • como en LinqPad, todo lo que vaya a descargar se anexará.
  • debe usar esto solo en pruebas unitarias, no en el código de producción, porque cuando despliega su aplicación las instrucciones de volcado siguen allí. Por supuesto, se puede rodear todas las declaraciones de volteo (incluyendo la declaración del paso 2. En la sección de preparación) por #if declaraciones como:

    #if DEBUG dump.Write(new string[] { "a", "b" }); #endif

    En caso de que quiera obligar a la referencia a LINQPad la configuración de DEPURACIÓN solamente, puede encontrar una pista here (o en más detalle there) cómo puede lograr eso.