代码之家  ›  专栏  ›  技术社区  ›  Gus

Silverlight多应用程序调试

  •  2
  • Gus  · 技术社区  · 16 年前

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

    这个问题最近才开始。我曾经能够同时调试所有Silverlight项目。有什么想法吗?我删除了clientbin文件夹,删除了所有文件并从源代码管理中重新检索。好像什么都没用。

    2 回复  |  直到 16 年前
        1
  •  2
  •   AnthonyWJones    16 年前

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

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

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

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

    您可以从注册表控制这个IE8特性(称为btw lcie,松散耦合的ie)。

    在关键 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 添加新的双字值 TabProcGrowth .将其值设置为1。现在,IE8将只为每个会话创建两个进程,一个用于框架,一个用于所有选项卡和窗口内容,这是vs将附加到的内容。

    如果您也使用IE8作为常规浏览器,这可能有点苛刻。一种选择是出于测试目的离开IE8,并使用另一个浏览器进行常规浏览。另一种选择是上述的变化。而不是创造 烟草生长 作为一个双字,将其创建为字符串类型,并将其值设置为“small”。在这种模式下,IE8在它将打开的进程数上的攻击性要小得多。当然,您可以创建两个脚本来创建和删除注册表项。

    注意,如果没有注册表条目IE8,它会使用自己的特性(取决于可用内存等)来确定新进程是否已被保存。这可以解释为什么在过去调试工作正常,而且显然没有理由它停止工作。

        2
  •  1
  •   Gus    16 年前

    问题是:

    我的一个小窗口有一个Silverlight,它调用.NET RIA服务。服务调用因错误而结束。

    下一次我调试了几个,调试程序没有附加到子窗口。我不得不手动安装在儿童窗上。

    我修复了RIA服务调用,这样它就不会以错误结束。必须在调试会话中手动附加到子窗口。但是,在随后的调试会话中,调试器会自动附加。

    我试图中断RIA服务呼叫,我不得不再次手动添加。有点奇怪的是,关闭Visual Studio甚至重新启动计算机都不会使Visual Studio再次自动附加。您必须有一个调试会话,在该会话中,子窗口成功地调用RIA服务来修复它。

    注: 破坏我的调试器的RIA错误是由域查询中拼写错误的include(即…

    return Context.SOME_ENTITY.Include("Misspelled_Association_Property");
    

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

    我的场景有许多具体的案例,我将详细介绍。我没有足够的工具来测试一个更一般的场景,但是当我完成我的项目时,我会这样做,除非有人先这样做。

    以下是我的资料:

    我使用的是2009年7月.NET RIA Services预览版中的a linqtoentiesdomainservice。

    更复杂的是,由于我的应用程序使用的是Oracle后端,所以我将Devart的Dotconnect实体提供程序用作我的域服务的EntityFramework模型。

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