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)中进行“就地”调试。


制备

  1. 正如Ray Vega所写,添加对LinqPad的x86版本(请记住Visual Studio仍然不是64位!)的引用(即添加引用 – > 浏览到通常位于其安装目录C:\ Program Files \中的exe二进制文件位置LINQPad \ – >选择LINQPad.exe。)

  2. 在要使用转储的范围中,添加:

     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(this T objToDump) { dump.Write(objToDump); return objToDump; } } 

在这种情况下,将断点放在return objToDump语句所在的行中。


可视化

在观察窗口中,添加

  dump.ToString() 

单击spyglass图标并选择“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中一样,您将转储所有内容。
  • 您应该仅在unit testing中使用它,而不是在生产代码中,因为在部署应用程序时,转储语句仍然存在。 当然,您可以通过#if语句包围所有转储语句(包括准备部分中步骤2中的语句),例如:

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

    如果您只想将LinqPad引用绑定到DEBUG配置,您可以在此处 (或更详细地)找到如何实现该提示的提示。