LINQPad dans Visual Studio

public static class Extensions{
public static void Dump<T>(this T o) { }
public static void Dump<T>(this T o, string s) { }}

ces lignes me permettent de copier le formulaire de code LINQPad vers VS et de l'exécuter sans commenter chaque ligne .Dump() mais ce n'est pas assez... http://code.google.com/p/linqpadvisualizer / - pas très confortable: (

le meilleur résultat que j'obtienne en cherchant LINQPad dans VS Est ce site avec le code ci-dessous de 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);
}
}

mais erreur 1 Le nom 'LINQPad' n'existe pas dans le contexte actuel

Je n'ai pas trouvé de LINQPad.dll sur le net

22
demandé sur Ray Vega 2011-03-24 05:50:22

2 réponses

ce n'est pas une dll pour LINQPad que vous devez consulter mais le LINQPad.exe lui-même.

cliquez avec le bouton droit de la souris sur votre projet dans Visual Studio- > ajouter une référence - > parcourir l'emplacement du fichier binaire exe qui se trouve généralement dans le répertoire d'installation C:\Program Files\LINQPad\ - > sélectionner LINQPad.exe .

une fois fait, vous pouvez ajouter une "directive d'utilisation" pour cela dans votre fichier:

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

la méthode LINQPad.Util.CreateXhtmlWriter sera maintenant disponible pour vous à utiliser.

26
répondu Ray Vega 2011-03-24 03:22:51

en plus des réponses données ci-dessus, j'ai trouvé une solution simple pour faire du débogage" en place " à L'intérieur de Visual Studio (2015).


préparation

  1. comme L'a écrit Ray Vega, ajoutez une référence à la version x86 (rappelez-vous que Visual Studio n'est toujours pas 64 bit!) de LinqPad (i.e. ajouter la référence - > parcourir à l'exe l'emplacement du fichier binaire se trouve typiquement dans son répertoire d'installation C:\Program fichiers\LINQPad\ - > sélectionnez LINQPad.EXE.)

  2. dans la portée où vous voulez utiliser dump, ajouter:

    public static dynamic dump = LINQPad.Util.CreateXhtmlWriter();
    
  3. ajouter à votre code lorsque vous avez besoin d'un dump:

    dump.Write(obj); // obj = the object to dump
    
  4. ajouter des points d'arrêt si nécessaire.

Note: si vous avez besoin de compatibilité avec le LinqPad .Méthode de Dump () , déclarez ce qui suit au lieu des étapes 2. et 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;
    }
}

dans ce cas, placez le point de rupture dans la ligne où se trouve l'énoncé return objToDump .


la Visualisation

dans la fenêtre de la montre, ajouter

    dump.ToString()

Cliquez sur l'icône spyglass et sélectionnez "visualiseur HTML". HtmlVisualizer

quand un point de rupture est touché, vous pouvez cliquer sur le spyglass et dans l'ouverture de la fenêtre popup vous pouvez voir le dump rendu (tout comme vous le verriez dans LinqPad).

DumpExample

dans cet exemple, l'expression

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

ou (si vous préférez l'autre syntaxe en utilisant la méthode d'extension mentionnée ci-dessus)

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

a été rendu.

notez que

  • parce que nous utilisons dynamic , il est parfois nécessaire d'ajouter explicitement Microsoft.CSharp aux références du projet ou vous obtiendrez un message d'erreur. Voir la discussion ici .
  • vous devez utiliser .NET Cadre 4.5.2 ou supérieur, les versions de cadre inférieur ne fonctionneront pas
  • comme dans LinqPad, tout ce que vous videz sera ajouté.
  • vous devez utiliser ceci dans les tests unitaires seulement, pas dans le code de production, parce que lorsque vous déployez votre application les déclarations de dump sont toujours là. Bien sûr, vous pouvez entourer toutes les déclarations de dump (y compris la déclaration de l'étape 2. dans la section de préparation) par #if des déclarations comme:

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

    dans le cas où vous voulez lier la référence LinqPad à la configuration de débogage seulement, vous pouvez trouver un indice ici (ou plus en détail ) comment vous pouvez y arriver.

16
répondu Matt 2017-10-27 12:10:05