Silverlight多应用程序调试

时间:2009-12-05 00:32:53

标签: asp.net silverlight debugging silverlight-3.0

我在同一解决方案中有三个Silverlight 3应用程序。在我的asp.net托管项目中,我有一个单独的页面用于所有三个项目。当我在页面之间导航时,唯一被点击的Silverlight断点是我加载的初始页面。

这个问题最近才刚刚开始。我曾经能够同时在所有silverlight项目之间进行调试。有任何想法吗?我删除了ClientBin文件夹,删除了所有文件并从源代码管理中重新检索。似乎没有什么工作。

2 个答案:

答案 0 :(得分:2)

“问题最近才开始”。改变了什么?以下是一些猜测: -

  • 您升级到Windows 7
  • 您安装了更多内存
  • 在测试时,其他一些内存耗尽的应用程序不再运行。

默认情况下,IE8将至少运行多个进程2.一个用于浏览器框架,另一个用于初始选项卡的内容。当您打开更多窗口和选项卡时,IE可能会向当前使用的集合添加新进程。

当您调试VS时,将启动一个新的IE8会话,并将附加到处理打开的单个选项卡的内容的进程(它不会附加到父框架进程)。但是,当您浏览应用程序时,IE8将启动VS不会附加到的新进程。这会强制您打开“附加到进程”对话框并手动执行。

您可以从注册表中控制此IE8功能(称为BTW LCIE,Loosely Coupled IE)。

在密钥HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main中添加新的DWORD值TabProcGrowth。将其值设置为1.现在IE8将只为每个会话创建2个进程,一个用于帧,一个用于所有选项卡和窗口内容,这是VS将附加到的。

如果您还使用IE8作为常规浏览器,这可能有点过分了。一种选择是让IE8用于测试目的,并使用另一个浏览器进行一般浏览。另一种选择是上述的变化。而不是将TabProcGrowth创建为DWORD而不是将其创建为字符串类型,而将value设置为“small”。在这种模式下,IE8在打开的进程数量上要小得多。当然,您可以创建几个脚本来创建和删除注册表项。

注意没有注册表项IE8使用自己的hueristics,它依赖于可用内存等来确定是否有新进程被警告。这可能解释了为什么过去你的调试工作正常,并且显然没有理由它停止工作。

答案 1 :(得分:1)

问题在于:

我的一个儿童窗户有一个Silverlight,可以调用.Net Ria服务。服务调用以错误结束。

下次我调试了几次时,调试器没有附加到子窗口。我必须手动附加到子窗口。

我修复了Ria服务调用,因此它没有以错误结束。并且必须在该调试会话中手动附加到子窗口。但是在后续调试会话中,调试器会自动附加。

我尝试打破Ria服务电话,我不得不再次手动连接。有点奇怪的是,关闭Visual Studio甚至重新启动计算机并不会使Visual Studio再次自动附加。您必须有一个调试会话,其中子窗口成功调用Ria服务来修复它。

注意: 破坏我的调试器的RIA错误是由域查询中的拼写错误包括(即......

)引起的
return Context.SOME_ENTITY.Include("Misspelled_Association_Property");

)并非所有RIA异常都会导致此问题。

我的情景中有一些具体的案例我将继续讨论。我没有把所有的东西都用到测试更一般的场景,但是当我完成我的项目时,除非有人先做到这一点。

这就是我所拥有的:

我正在使用2009年7月.Net RIA Services预览版中的LinqToEntitiesDomainService。

为了使事情复杂化,因为我的应用程序使用的是Oracle后端,我使用DevArt的dotConnect实体提供程序作为我的域服务的EntityFramework模型。

当我有时间的时候,我会在2009年11月的RIA和标准的SQL后端和EF上尝试这个,看看我是否还有同样的问题。如果是这种情况,我会将其作为Visual Studio bug报告给Microsoft。