有没有工具可以简化将.NET代码移植到Silverlight的过程?

3
我们有一些.NET客户端代码,我们希望将其移植到Silverlight。然而,当前的.NET代码在Silverlight平台上根本无法编译。除了一些微妙的问题外,还存在许多简单的问题,例如: - 在SL中,某些异常构造函数较少 - SL中不存在Debug.Fail - 在SL中不存在BindingList - 对私有反射施加了严格限制
这些差异中的一些可以应用于普通的.NET代码,以最小化.NET和SL代码库之间的差异。例如,如果调用Debug.Assert时使用false而不是Debug.Fail可以使我的.NET代码不会被污染为#if SILVERLIGHT。同样,将BindingList替换为ObservableCollection也是如此。
我的问题是是否有一种工具,可以在给定.NET程序集的情况下,呈现某种Silverlight兼容性报告,指出必须对.NET代码库进行哪些更改,以使其尽可能接近Silverlight平台?
谢谢。
编辑:
该工具执行的工作略微复杂,不仅要在SL中编译代码并显示错误。这与存在于SL和.NET中的代码有关,但在SL中对常规(透明)代码不可用。在SL上调用它会导致异常。
进一步澄清几点: 1. 代码不是UI代码。它既不是WinForms,也不是WebForms或WPF。它是纯粹的业务逻辑代码,客户端UI依赖于它。 2. 我们的业务逻辑基于Lhotka的CSLA库,该库有一个SL版本。 3. 使用VS仅在SL中编译项目只报告编译错误。它不会通知我任何无效的API使用,例如调用在SL中为SecurityCritical的方法。

+1 我不知道有没有这样的工具,但听起来像是一些公司(比如微软)应该会创建的东西。 - AnthonyWJones
实际上不是这样的。该代码是使用Lhotka的CSLA库编写的纯客户端业务逻辑。该库本身确实有一个SL端口,但我们围绕它构建了许多自定义逻辑,与WPF无关。这是一个业务层,必须以某种形式在SL上运行。 - mark
3个回答

1
你应该意识到,你的业务逻辑不必遵循 Silverlight 的规范。为什么不通过一些 Web 服务来公开你的业务逻辑(这是一个相对简单的任务),然后从 Silverlight 代码中调用它呢?Silverlight 代码和 Web 服务甚至可以驻留在同一台机器上,并且每个都使用自己的框架版本,你不必将 Web 服务托管在不同的机器上。以这种方式处理事情意味着你可以编写一个漂亮的轻量级 Silverlight 用户界面,并且在业务层面上做最少的工作。
(此答案取代了我之前的答案,并针对澄清后的问题)

有趣。但我怀疑它是否可行。在我看来,一个丰富的桌面客户端必须依赖相当复杂的业务层。UI和客户端业务层之间的交互非常密集。如果两者处于不同的进程中通过Web服务进行通信,我不确定应用程序是否会非常响应。但这很有趣,我想知道是否有人采取了这种方法并有什么可以分享的经验。你有吗? - mark
你说得没错,网络服务确实会使事情变慢,但只是一点点而已。我曾经使用过网络服务,在不到一秒钟的时间内从另一台机器返回了5000多条记录。但这种延迟并不糟糕,取决于你如何向用户展示它。如果你想要一个稍微快一点的用户界面(Silverlight 可能有点慢),那么可能一个 ClickOnce WPF 或者嵌入网页的 WPF xbap 会更适合你。WPF 比 Silverlight 更快,并且利用了完整的 .Net 框架,而不是精简版 - 实际上,WPF 有很多优点。 - slugster
实际上我有一年的WPF经验,感觉非常舒适。我们需要SL,因为它提供了除WPF之外的东西——平台独立和真正的Web体验。XBAP的功能太过有限。ClickOnce只是安装桌面应用程序的手段,它也有其局限性。始终存在将真正的WPF代码打包为ActiveX并让浏览器托管它的可能性,但我已经尝试过了,不希望再重复这样的方式。 - mark

0

这可能不是你想听到的答案,但使用Visual Studio有什么问题呢?当你尝试编译时,它会告诉你错误在哪里。

如果你正在寻找一份报告,以便确定某项工作需要多长时间,那么报告并不能准确地告诉你。这不仅仅是因为你正在使用一个精简版的框架,而且在Silverlight中也有很多不同的做法,例如WinForms无法直接转换,即使是WebForms也需要相当数量的工作才能成为一个Silverlight页面/表单。


谢谢回复。我已经澄清了我的问题。 - mark

0
我建议您将代码分成多个层,这样您就可以在不重写较低层的情况下替换UI层。

谢谢回复。我已经澄清了我的问题。 - mark

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