使用 Silverlight 3 测试 Silverlight 2 代码并迁移到 Silverlight 3
本文描述了我升级到 Silverlight 3 的经验,以及为确保我们的代码能够运行所采取的步骤。
所以我已经看到了 Silverlight 3 的发布,并且我们对是否升级进行了一些讨论。最终,我们得出的结论是,不升级的唯一原因可能是对我们现有应用程序有重大影响。我们决定必须等待最终发布,然后再用我们当前的代码进行测试。
我听说了许多关于向后兼容性的说法,但之前在其他升级中也听过,并且在实际尝试时我感到非常失望。说到向后兼容性,我想眼见为实。所以上周,我花了一些时间来检查升级到 Silverlight 3。
为了确保我不会对自己的开发环境做任何事情,我决定使用虚拟机并在其上进行测试。以下是我计划使用 Silverlight 3 测试我们应用程序的步骤
- 安装 Silverlight 3 运行时
- 使用 Silverlight 3 运行时测试我们的应用程序
- 安装 Silverlight 3 开发环境
- 更改 .aspx 页面以使用
object
标签而不是asp:Silverlight
控件 - 获取完整的解决方案进行编译
- 让应用程序运行
- 测试行为变化
前两个步骤非常顺利,一切都按预期工作。这太棒了,但我有点期望这样,因为 Silverlight 3 运行时仍然像处理 Silverlight 2 应用程序一样处理我的应用程序。测试通过。
因为我只想用开发环境测试我们客户端软件的 Silverlight 3 迁移,所以我决定使用新的 Microsoft Web Platform Installer 来设置所需的工具。我以前没试过,所以我不知道会发生什么。实际上,在安装过程中我只有一个意外,那就是安装 IIS 的时候。它要求我插入磁盘,在这种情况下是 Windows XP SP2,以便它可以从该磁盘复制 IIS 的文件。
除此之外,这仍然是一个合乎逻辑的选择,因为 IIS 显然是您拥有的 Windows 许可证的一部分,所有内容都被自动下载和安装,我在两个小时内完成了所有安装,同时阅读了 Silverlight 2 和 3 之间的重大变化(对于向后兼容的版本来说很奇怪,对吧 :-p)。总而言之,我对 Microsoft 的这个很棒的新解决方案感到惊喜,我希望他们尽快允许我们通过 WPI 安装你的授权版本的 Visual Studio。
现在我已经准备好测试将我的应用程序实际升级到 Silverlight 3,我将源代码复制到我的虚拟机上,并使用 Visual Web Developer 打开解决方案。除了我忘记复制一些链接文件的一些错误之外,它打开并转换了我的解决方案,没有任何问题。在放入缺失的文件后,它编译没有问题。我按下了 F5,并满怀期待地等待… 它在第一次尝试时就成功了!但是,我有点太快了,因为我没有用 object
标签替换 asp:Silverlight
标签,并且它仍在启用著名的怪癖模式下运行(因为最低版本仍然指向 Silverlight 2)。我用 object
标签替换了 asp:Silverlight
标签,如下所示
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2,"
type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/someapp.xap"/>
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="3.0.40624.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0"
style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight"
style="border-style: none"/>
</a>
</object>
<iframe id="_sl_historyFrame" style='visibility:hidden;height:0;width:0;border:0px'>
</iframe>
</div>
我再次运行了应用程序…… 并且它仍然按预期工作!经过更多测试后,我在我们的应用程序中发现的唯一行为变化是 ListBox.ScrollIntoView
方法。在 Silverlight 2 中,如果您使用 listbox
中的最后一项调用此方法,它会将其滚动到视图中,但它仍然位于屏幕底部。在 Silverlight 3 中,如果您使用最后一项调用此方法,它实际上会将该项滚动到 listbox
的顶部,在其下方显示空白空间。由于这正是我们在这种情况下所期望的行为,因此我没有做任何研究来查看是否可以更改它。
总而言之,这一直是我经历过的最无痛的迁移之一。微软,祝贺你们的出色工作。