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, - это сайт с кодом, приведенным ниже, от 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);
}
}
но Ошибка 1 Имя 'LINQPad' не существует в текущем контексте
Я не мог найти LINQPad.dll в сети
3 ответа
Это не dll для LINQPad, на которую нужно ссылаться, а сам LINQPad.exe.
Щелкните правой кнопкой мыши свой проект в Visual Studio -> Добавить ссылку -> Найдите расположение исполняемого двоичного файла, обычно находящегося в каталоге установки. C:\Program Files\LINQPad\
-> выбрать LINQPad.exe
,
После этого вы можете добавить в свой файл "директиву using":
using System.Diagnostics;
using System.IO;
using LINQPad;
Метод LINQPad.Util.CreateXhtmlWriter
теперь будет доступен для использования.
В дополнение к ответам, приведенным выше, я нашел простое решение для отладки "на месте" в 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()
Нажмите на значок Spyglass и выберите "HTML Visualizer".
Когда достигается точка останова, вы можете нажать на spyglass и в открывшемся всплывающем окне вы можете увидеть обработанный дамп (так же, как вы видели бы его в LinqPad).
В этом примере выражение
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, вы можете найти подсказку здесь (или более подробно там), как этого добиться.
Рекомендуйте использовать пакет nuget, связанный с LINQPad, тогда вы можете использовать
Dump()
метод с ним.
Для ядра .NET:
- Установите LINQPad.Runtime
Для .NET framework 4 и т.д.
- Установите LINQPad