LINQPad在Visual Studio中

Prz*_*zek 24 .net c# 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) { }}
Run Code Online (Sandbox Code Playgroud)

这些行允许我将代码从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);
}
}
Run Code Online (Sandbox Code Playgroud)

但错误1当前上下文中不存在名称"LINQPad"

我在网上找不到任何LINQPad.dll

Ray*_*ega 26

它不是LINQPad的dll,你需要引用LINQPad.exe本身.

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

完成后,您可以在文件中为其添加"using directive":

using System.Diagnostics;
using System.IO;
using LINQPad;
Run Code Online (Sandbox Code Playgroud)

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

  • @Przemyslaw程序集是一个程序集. (5认同)
  • 不知道你可以引用.exe文件.谢谢. (2认同)

Mat*_*att 18

除了上面给出的答案,我发现了一个简单的解决方案,可以在Visual Studio(2015)中进行"就地"调试.


制备

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

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

    public static dynamic dump = LINQPad.Util.CreateXhtmlWriter();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 要转储,请在需要转储的代码中添加:

    dump.Write(obj); // obj = the object to dump
    
    Run Code Online (Sandbox Code Playgroud)
  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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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


可视化

在观察窗口中,添加

    dump.ToString()
Run Code Online (Sandbox Code Playgroud)

单击spyglass图标并选择"HTML Visualizer". HtmlVisualizer

当遇到断点时,您可以单击望远镜并在弹出窗口中打开,您可以看到渲染的转储(就像您在LinqPad中看到的那样).

DumpExample

在这个例子中,表达式

        dump.Write(new string[] { "a", "b" });
Run Code Online (Sandbox Code Playgroud)

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

        (new string[] { "a", "b" }).Dump();
Run Code Online (Sandbox Code Playgroud)

被渲染了.

注意

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

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

    如果你要绑定的LinqPad参考调试配置而已,你可以找到一个提示在这里(或更详细那里),你如何能做到这一点.