gpt4 book ai didi

visual-studio - 试图让 DataRow[] Debugger Visualizer 在 Visual Studio 2010 中工作

转载 作者:行者123 更新时间:2023-12-01 01:32:37 25 4
gpt4 key购买 nike

我正在尝试让 DataRow[] DebuggerVisualizer 为 VisualStudio 2010 工作,但不幸的是我无法让它工作。我可以让 DataRow 一个工作但不是 DataRow[],我会喜欢吗?

代码的内容在这里。


[assembly: DebuggerVisualizer(
typeof( PCHenry.DR ),
typeof( PCHenry.DRObjectSource ),
Target = typeof( DataRow[] ),
Description = "DataRow Array Debugger Visualizer (or so if you see this then it's working YAHOO!)" )]
namespace PCHenry
{
public class DR : DialogDebuggerVisualizer
{
protected override void Show( IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider )
{
StringBuilder stringToDebug = new StringBuilder();
using( Stream dataStream = objectProvider.GetData() )
{
BinaryFormatter formatter = new BinaryFormatter();
string incomingData = formatter.Deserialize( dataStream ) as string;
stringToDebug.Append( string.Format( "*!!!!{0}!!!!*", incomingData ) );
}

MessageBox.Show( stringToDebug.ToString(), "PCH String Debugger Visualizer", MessageBoxButtons.OK, MessageBoxIcon.Asterisk );
}
}

public class DRObjectSource : VisualizerObjectSource
{
public override void GetData( object target, Stream outgoingData )
{
if( target != null && target is DataRow[] )
{
DataRow[] rows = target as DataRow[];
BinaryFormatter formatter = new BinaryFormatter();
//formatter.Serialize( outgoingData, target );

formatter.Serialize( outgoingData, string.Format( "There are {0} rows of data", rows.Length ) );
}
}
}
}

我希望您能看到,我正在尝试正确设置目标,但 VS 在运行时/调试时并未使用它。是的,我正在将 DLL 复制到正确的 Visualizers 目录。事实上,我正在使用 BuildEvent 来为我完成这项工作。

xcopy "$(SolutionDir)$(ProjectName)\$(OutDir)$(TargetFileName)" "$(USERPROFILE)\Documents\Visual Studio 2010\Visualizers" /y

当我测试这个时,我使用这个。


static void Main( string[] args )
{
//String myName = "Peter Henry";
#region DataSetup, create a Habs DataTable and populate it with players
DataTable table = new DataTable( "Habs" );
table.Columns.Add( "PlayerNumber", typeof( Int32 ) );
table.Columns.Add( "PlayerName", typeof( string ) );
table.Columns.Add( "Position", typeof( string ) );

//team as current as 09-23-2010 from the Canadiens! GO HABS GO!
table.Rows.Add( new object[] { 32, "Travis Moen", "F" } );
table.Rows.Add( new object[] { 94, "Tom Pyatt", "F" } );
table.Rows.Add( new object[] { 75, "Hal Gill", "D" } );
table.Rows.Add( new object[] { 26, "Josh Gorges", "D" } );
table.Rows.Add( new object[] { 76, "P.K. Subban", "D" } );
table.Rows.Add( new object[] { 35, "Alex Auld", "G" } );
#endregion

//use this to show the debugger in two different ways
DataRow[] defencemen = table.Select( "Position = 'D'", "PlayerNumber" );

//this proves this works when told which ObjectSource to use
VisualizerDevelopmentHost host = new VisualizerDevelopmentHost(
defencemen, typeof( PCHenry.DR ),
typeof( PCHenry.DRObjectSource ) );
host.ShowVisualizer();

//but when I try to use VS debugging here, it can't seem to find the custom DebuggerVisualizer as I would expect
defencemen = table.Select( "Position = 'D'", "PlayerNumber" );
Debugger.Break();

Console.WriteLine( "FIN" );
Console.ReadLine();
}

这里的关键是,VisualizerDevelopmentHost 工作正常,我只能猜测原因是它被告知要使用哪个 VisualizerObjectSource。但是当我点击 Debugger.Break();线并尝试像往常一样使用它,我看不到防御者 DataRow[] 的放大镜。

我打心底相信这是可以做到的。我在 MSDN 上读到 DataRow 无法完成,但我让它工作了。我真的希望你能帮助我解决这个问题。

非常感谢你们的回复。你证实了我的想法(好吧,我在与它斗争了四个晚上后才意识到什么!)。再次感谢。我写了关于它的博客并引用了这些信息。非常感谢您的宝贵时间。

Visual Studio Debugger Visualizers (Take Three)

最佳答案

在大多数情况下,斯派克所说的都是真的。您可以为任何“对象或数组除外”编写可视化工具:http://msdn.microsoft.com/en-us/library/e2zc529c.aspx

“数组”似乎有点模棱两可;但是有很多人有同样的问题...

我一直无法找到任何特定于此(并且还没有尝试过)但是,IEnumerable 呢?那样有用吗?

还有一篇有趣的文章介绍了 Visualizer 可以使用的对象类型的限制,但此处除外:http://joshsmithonwpf.wordpress.com/2008/01/20/the-rock-star-hack-of-2008/

关于visual-studio - 试图让 DataRow[] Debugger Visualizer 在 Visual Studio 2010 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3809481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com