25
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/ - 不太舒服: (

我在 VS 中搜索 LINQPad 得到的最好结果是这个网站,下面是 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

4

3 回答 3

32

不是LINQPad 的 dll - 您需要引用LINQPad.exe本身。

在 Visual Studio 中右键单击您的项目 -> 添加引用 -> 浏览到 exe 二进制文件位置,通常在其安装目录中找到C:\Program Files\LINQPad\-> 选择LINQPad.exe.

完成后,您可以在文件中为其添加“使用指令”:

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

该方法LINQPad.Util.CreateXhtmlWriter现在可供您使用。

于 2011-03-24T03:11:32.913 回答
20

除了上面给出的答案之外,我还找到了一个在 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<T>(this T objToDump)
    {
        dump.Write(objToDump);
        return objToDump;
    }
}

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


可视化

在监视窗口中,添加

    dump.ToString()

单击望远镜图标并选择“HTML Visualizer”。 HtmlVisualizer

遇到断点时,您可以单击望远镜,然后在打开的弹出窗口中可以看到渲染的转储(就像您在 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 配置,您可以在此处(或更详细地在此处)找到如何实现此目的的提示。

于 2016-07-05T08:50:27.900 回答
1

推荐使用LINQPad相关的nuget包,然后你可以使用 Dump()它的方法。

LINQPad

对于 .NET 核心:

  • 安装 LINQPad.Runtime

对于 .NET 框架 4 等。

  • 安装 LINQPad
于 2021-01-20T04:51:50.623 回答