【问题标题】:LINQPad in Visual StudioVisual Studio 中的 LINQPad
【发布时间】:2011-03-24 02:50:22
【问题描述】:
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 得到的最佳结果是 site,下面是 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

【问题讨论】:

    标签: c# .net visual-studio linqpad


    【解决方案1】:

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

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

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

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

    您现在可以使用方法LINQPad.Util.CreateXhtmlWriter

    【讨论】:

    • 不知道您可以引用 .exe 文件。谢谢。
    • @Przemyslaw 一个程序集就是一个程序集。
    【解决方案2】:

    除了上面给出的答案之外,我还找到了一个在 Visual Studio (2015) 中进行“就地”调试的简单解决方案。


    准备

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

    2. 在要使用dump的范围内,添加:

      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”。

    当断点被命中时,您可以单击望远镜,然后在打开的弹出窗口中您可以看到渲染的转储(就像您在 LinqPad 中看到的一样)。

    在本例中,表达式

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

    或(如果您更喜欢使用上述扩展方法的其他语法)

            (new string[] { "a", "b" }).Dump();
    

    已渲染。

    请注意

    • 因为我们使用dynamic,所以有时需要在项目的引用中显式添加Microsoft.CSharp,否则您会收到错误消息。见讨论here
    • 您需要使用 .NET Framework 4.5.2 或更高版本,较低的框架版本将无法使用
    • 就像在 LinqPad 中一样,您转储的所有内容都会被附加。
    • 您应该只在单元测试中使用它,而不是在生产代码中,因为当您部署应用程序时,转储语句仍然存在。当然,您可以使用#if 语句将所有转储语句(包括准备部分中步骤 2. 中的语句)包围起来,例如:

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

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

    【讨论】:

      【解决方案3】:

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

      对于 .NET 核心:

      • 安装 LINQPad.Runtime

      对于 .NET 框架 4 等

      • 安装 LINQPad

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多