LINQPad в Visual Studio - PullRequest
       3

LINQPad в Visual Studio

24 голосов
/ 24 марта 2011
public static class Extensions{
public static void Dump<T>(this T o) { }
public static void Dump<T>(this T o, string s) { }}

Эти строки позволяют мне копировать код из LINQPad в VS и запускать его, не комментируя каждую строку с помощью .Dump (), но этого недостаточно ... http://code.google.com/p/linqpadvisualizer/ - не очень удобно: (

Лучший результат поиска LINQPad в VS - это сайт с приведенным ниже кодом Пата Куджавы.

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);
}
}

, но ошибка 1 Название LINQPad не соответствуетсуществует в текущем контексте

Я не смог найти ни одного LINQPad.dll в сети

Ответы [ 2 ]

26 голосов
/ 24 марта 2011

Это не dll для LINQPad - вам нужно сослаться на сам LINQPad.exe .

Щелкните правой кнопкой мыши свой проект в Visual Studio -> Добавить ссылку -> Найдите расположение исполняемого двоичного файла, обычно находящегося в каталоге установки C:\Program Files\LINQPad\ -> выберите LINQPad.exe.

После этого вы можете добавить в свой файл «директиву using»:

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

Теперь вам будет доступен метод LINQPad.Util.CreateXhtmlWriter.

17 голосов
/ 05 июля 2016

В дополнение к ответам, приведенным выше, я нашел простое решение для отладки «на месте» в Visual Studio (2015).


Подготовка

  1. Как писал Рэй Вега, добавьте ссылку на версию x86 (помните, что Visual Studio по-прежнему не 64-разрядная!) LinqPad (то есть Добавить ссылку -> Просмотр в расположение исполняемого двоичного файла, обычно находящегося в каталоге установки C: \ Program Files \ LINQPad \ -> выберите LINQPad.exe.)

  2. В области, в которой вы хотите использоватьdump, добавьте:

    public static dynamic dump = LINQPad.Util.CreateXhtmlWriter();
    
  3. Чтобы создать дамп, добавьте к своему коду, где вам нужен дамп:

    dump.Write(obj); // obj = the object to dump
    
  4. Добавьте точки останова, гдетребуется.

Примечание: Если вам требуется совместимость с методом LinqPad .Dump () , объявите следующее вместо шагов 2. и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;
    }
}

В этом случае разместите точку останова в строке, где находится оператор return objToDump.


Визуализация

В окне просмотра добавьте

    dump.ToString()

Щелкните значок «Подзорная труба» и выберите «HTML Visualizer».HtmlVisualizer

Когда достигается точка останова, вы можете щелкнуть шпионское стекло, и в открывшемся всплывающем окне вы увидите обработанный дамп (так же, как вы видели бы его в LinqPad).

DumpExample

В этом примере выражение

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

или (если вы предпочитаете другой синтаксис, используя метод расширения, упомянутый выше)

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

визуализировано.

Обратите внимание, что

  • , поскольку мы используем dynamic, иногда требуется явно добавить Microsoft.CSharp к ссылкам проекта, или вы получитесообщение об ошибке.Смотрите обсуждение здесь .
  • , вам нужно использовать .NET Framework 4.5.2 или выше, более низкие версии фреймворка не будут работать
  • , как в LinqPad, все, что вы сбросите, будетappended.
  • Вы должны использовать это только в модульных тестах, а не в производственном коде, потому что при развертывании приложения операторы дампа все еще там.Конечно, вы можете окружить все операторы дампа (включая оператор из шага 2. в разделе подготовки) такими #if операторами, как:

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

    Если вы хотите привязать ссылку LinqPad только к конфигурации DEBUG, вы можете найти подсказку здесь (или более подробно там ), как этого добиться.

...