我正在开发一个相当大的Silverlight 4应用程序(在一个解决方案中有42个项目),我正在努力解决一个非常奇怪的问题。
该应用程序在调试版本中运行良好,即使在发布版本中,它也会在附带调试器的情况下运行(F5),但是在没有调试的情况下运行它时会加载silverlight xap,然后只显示一个空白页面。
我正在处理没有触发的Application_UnhandledException,因此几乎不可能从中获取任何有用的信息,特别是因为我无法在附加调试器的情况下重现这种行为。
附加调试器时运行时会有什么不同可能会导致此问题?
编辑:我还应该补充一点,调试版本也可以在没有附加调试器的情况下运行。
答案 0 :(得分:2)
事实证明问题是发布版本执行了一些改进调用程序集的优化。
我们使用反射在IoC容器中注册类型,并在调试Assembly.GetCallingAssembly()中注册.GetTypes()始终返回预期的程序集。但在发布模式下,调用程序集是生成的Anonymousously Hosted DynamicMethods程序集,因此我们的类型未在IoC容器中注册,并且应用程序在发布模式下崩溃。
修复是使用this.GetType()。而是使用。
问题的复杂性是,当从IoC容器中抛出异常时,Silverlight只显示一个空白页面,因此很难确定失败的原因。当然有一些方法可以改变这种行为吗?
答案 1 :(得分:1)
IIS部署中空白页的常见原因是缺少MIME TYPES定义。 根据silverlight应用程序的类型,必须添加以下一种或多种类型:
.xap application / x-silverlight-app .xaml application / xaml + xml .xbap application / x-ms-xbap