Silverlight 4 / .NET 4 调试资源字符串

28

最近我遇到了一个奇怪的问题。在我的公司的一些服务器上,当打印出异常消息时(是的,这很糟糕,我知道,但这是为了调试),实际的消息没有显示出来。相反,它显示了一个外部字符串资源的键,并说“调试资源字符串不可用”。

经过一些研究,我得出了以下结论:

在发布模式下,Silverlight 不会将包含实际错误消息的 dll 与 xap 打包在一起以节省空间。

我已经找到了旧版本的解决方法,但对于4版本,我什么都没找到。似乎有 SL 2 和 3 运行时的开发者版本可以自动解决错误,但我找不到 SL 4 的开发者版本。

所以我的问题是:

在发布模式下,我需要对我的 SL 4 应用程序 / 计算机进行哪些操作,才能让我看到完整详细的错误信息?


很好的问题,我以前只是接受了这个,但更好的崩溃报告会更好。 - Jeff Yates
另一个令人讨厌的事情是,微软在其SL网站上有一个隐晦的子部分,可以提供这些错误的详细信息,但似乎并不包含所有错误。 - Kir
开发者运行时可以在Silverlight.net的“入门”页面找到。 - carlosfigueira
3个回答

6
您可以从GetStarted页面下载开发者运行时(其中包含完整的异常字符串)- http://www.silverlight.net/getstarted/ - 搜索“Windows和OSX的开发者运行时”,它位于页面底部。

1
虽然回复已经晚了,但它可能会帮助其他人。我们有一个使用Silverlight 4的Web应用程序,安装在各种测试环境中。此Web应用程序消耗超过一个WCF服务。所有测试环境站点都一直出现“调试资源字符串不可用”的消息,除了其中一个。可以认为真正的异常被吞噬了。作为Silverlight应用程序,没有日志记录,并且似乎总是有某个Silverlight组件失败了。我将应用程序连接到我的开发环境中的那个特定测试环境,并发现问题实际上是在其中一个WCF服务中。我在服务端修复了问题,SL组件停止出现这个问题。

为什么WCF会失败?

WCF服务的构造函数中有以下代码:

public MyService()
    {
        //Create an instance of Data Lookup service asycnchronously.
        if (_dataLookupSrvc == null)
        {
            try
            {
                System.Threading.Tasks.Task.Factory.StartNew(() => _dataLookupSrvc = new LookupDataService.LookupDataService());
            }
            catch (Exception ex)
            {
                _log.Error<Exception>(ex);
            }
        }
    }

有人将底层的LookupDataService.dll从服务文件夹中移动,导致构造函数失败,但并非立即发生。由于LookupDataService实例是在匿名方法中创建的,因此该方法中的异常日志记录从未发生。一旦LookupDataService.dll被放置在服务文件夹中,“调试资源字符串不可用”消息就消失了。
这是一个有趣的寻找错误过程!

-2

您是否已经检查了应用程序崩溃的计算机上的事件查看器?开始->运行。eventvwr


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接