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, вы можете найти подсказку здесь (или более подробно там), как вы можете это достичь.