有没有办法在Visual Studio 2012中将对象保存到磁盘?

时间:2013-04-16 20:32:11

标签: asp.net debugging visual-studio-2012

我正在寻找一个bug,如果我可以将我的Locals Window对象的内容转储到一个文件中,这样我就可以将它在Notepad ++中与另一个正常工作的对象记录进行比较,这将非常有用。问题是:我们不确定代码中是否存在错误或记录是否存在差异。

有没有办法将对象/变量保存到磁盘?

我发现了this扩展,但遗憾的是它仅适用于VS 2010,而且我有2012年。

6 个答案:

答案 0 :(得分:5)

您可以使用ObjectDumper project on CodePlex。它也可以作为NuGet包使用。

答案 1 :(得分:2)

我参加派对有点晚了但是我创建了一个名为Object Exporter的Visual Studio扩展程序,可以完全满足您的需求。它会将调试窗口中的任何对象(目前仅限于本地窗口)导出为JSON,XML或CSharp对象初始化代码。

扩展可以在这里找到: https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f

博客文章更多信息: http://www.omarelabd.net/exporting-objects-from-the-visual-studio-debugger/

答案 2 :(得分:1)

导出本地扩展程序的sources可由作者下载 http://barad-dur.nl/net/export-locals/所以你应该可以轻松地将它转换为VS2012。

答案 3 :(得分:1)

我在OzCode工作。它是Visual Studio的调试扩展,我们一直致力于将实例导出为未来版本的XML,json或C#代码。
您可以从Visual Studio's marketplace下载早期访问预览。 它是一种商业级解决方案,可以快速导出大量数据。

choosing eport format

我建议您尝试一下 - 一旦使用 Export 安装OzCode,只需打开DataTip窗口并选择“导出”即可。

Exporting image

答案 4 :(得分:0)

尝试打开立即窗口并键入对象名称。它将打印出简单的属性及其值。但它不能很好地处理对象的属性。

或者,您可以使用JSON序列化程序对其进行序列化并在调试控制台中将其打印出来。

答案 5 :(得分:0)

我使用Log4Net和ObjectDumper进行了一些实验来转储对象。

查看我的博文:Logging Complete Objects with Log4Net

基本上你创建自己的IObjectRenderer,配置它,然后你可以简单地log.Debug(你的对象)


public class Log4NetObjectLogger : IObjectRenderer
    {
        public void RenderObject(RendererMap rendererMap, object obj, TextWriter writer)
        {
            var ex = obj as Exception;

            //if its not an exception, dump it. If it's an exception, log extended details.
            if (ex == null)
            {
                //by default log up to 10 levels deep.
                ObjectDumper.Write(obj,10,writer);
            }
            else
            {
                while (ex != null)
                {
                    RenderException(ex, writer);
                    ex = ex.InnerException;
                }
            }
        }

        private void RenderException(Exception ex, TextWriter writer)
        {
            writer.WriteLine(string.Format("Type: {0}", ex.GetType().FullName));
            writer.WriteLine(string.Format("Message: {0}", ex.Message));
            writer.WriteLine(string.Format("Source: {0}", ex.Source));
            writer.WriteLine(string.Format("TargetSite: {0}", ex.TargetSite));
            RenderExceptionData(ex, writer);
            writer.WriteLine(string.Format("StackTrace: {0}", ex.StackTrace));
        }

        private void RenderExceptionData(Exception ex, TextWriter writer)
        {
            foreach (DictionaryEntry entry in ex.Data)
            {
                writer.WriteLine(string.Format("{0}: {1}", entry.Key, entry.Value));
            }
        }
    }