LINQPad в Visual Studio

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 в сети

Ответ 1

Это не dll для LINQPad, которую вам нужно ссылаться, но сам LINQPad.exe.

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

Как только вы закончите, вы можете добавить для него "использование директивы" в файле:

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

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

Ответ 2

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


Подготовка

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

  • В области, где вы хотите использовать дамп, добавьте:

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

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

Примечание. Если вам требуется совместимость с методом 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, все, что вы сбросите, будет добавлено.
  • вы должны использовать это только в модульных тестах, а не в производственном коде, потому что при развертывании приложения дамп-заявления все еще существуют. Конечно, вы можете окружать все заявления дампа (включая инструкцию с шага 2. в разделе подготовки) операторами #if, такими как:

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

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