Visual Studio中的LINQPad
public static class Extensions{ public static void Dump(this T o) { } public static void Dump(this T o, string s) { }}
这些行允许我将代码从LINQPad复制到VS并运行它而不用.Dump()注释每一行但是这还不够…… http://code.google.com/p/linqpadvisualizer/ – 不太舒服: (
我在VS中搜索LINQPad的最佳结果是这个网站 ,下面是Pat Kujawa的代码。
using System.Diagnostics; using System.IO; public static class Extensions { public static void Dump(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
它不是LINQPad的dll,你需要引用LINQPad.exe本身。
在Visual Studio中右键单击项目 – >添加引用 – >浏览到通常位于其安装目录C:\Program Files\LINQPad\
– >中的exe二进制文件位置选择LINQPad.exe
。
完成后,您可以在文件中为其添加“using directive”:
using System.Diagnostics; using System.IO; using LINQPad;
LINQPad.Util.CreateXhtmlWriter
方法现在可供您使用。
除了上面给出的答案,我发现了一个简单的解决方案,可以在Visual Studio(2015)中进行“就地”调试。
制备
-
正如Ray Vega所写,添加对LinqPad的x86版本(请记住Visual Studio仍然不是64位!)的引用(即添加引用 – > 浏览到通常位于其安装目录C:\ Program Files \中的exe二进制文件位置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(this T objToDump) { dump.Write(objToDump); return objToDump; } }
在这种情况下,将断点放在return objToDump
语句所在的行中。
可视化
在观察窗口中,添加
dump.ToString()
单击spyglass图标并选择“HTML Visualizer”。
当遇到断点时,您可以单击望远镜并在弹出窗口中打开,您可以看到渲染的转储(就像您在LinqPad中看到的那样)。
在这个例子中,表达式
dump.Write(new string[] { "a", "b" });
或者(如果您更喜欢使用上面提到的扩展方法的其他语法)
(new string[] { "a", "b" }).Dump();
被渲染了。
注意
- 因为我们正在使用
dynamic
,有时需要将Microsoft.CSharp
显式添加到项目的引用中,否则您将收到错误消息。 见这里的讨论。 - 您需要使用.NET Framework 4.5.2或更高版本,较低的框架版本将无法使用
- 就像在LinqPad中一样,您将转储所有内容。
-
您应该仅在unit testing中使用它,而不是在生产代码中,因为在部署应用程序时,转储语句仍然存在。 当然,您可以通过
#if
语句包围所有转储语句(包括准备部分中步骤2中的语句),例如:#if DEBUG
dump.Write(new string[] { "a", "b" });
#endif
如果您只想将LinqPad引用绑定到DEBUG配置,您可以在此处 (或更详细地)找到如何实现该提示的提示。