DevForce 在 Silverlight 和非 Silverlight 平台之间存在哪些差异?

What differences exist in DevForce between Silverlight and non-Silverlight platforms?

我们最近在代码中遇到了一个错误,该错误是由 DevForce 在 Silverlight 下与非 Silverlight 环境下的行为方式的细微差别引起的。我们发现,当 DevForce 在 Silverlight 中引发 'all properties have changed' 事件时,它通过在 PropertyChanged 事件中使用 string.Empty 来实现。但是,在非 Silverlight 中,使用 null 代替。这对我们来说并不是那么难解决——我们可能应该一直注意 nullstring.Empty。但这让我们担心是否还有其他我们应该注意的细微差异。

像这样,Silverlight 和非 Silverlight 之间是否还有其他已知差异?显然存在一些差异,例如 Silverlight 不允许同步查询......但是有据可查。我正在寻找像这样的小东西,它可能会破坏以前在 Silverlight 中运行良好的代码。

抱歉您 运行 进入 PropertyChanged 问题。这种分歧实际上是由于 SL DataForm 中的一个旧错误引起的,但它从未在 DevForce 中得到重新解决,因为 MS 文档确实说 null 和空字符串都做同样的事情。 FWIW,DF 在所有非完整的 .NET 环境中使用此处的空字符串。

我们没有关于这些细微差异的任何文档。一般来说,大多数环境差异会导致不同的表面积,通常会减少 API。因此,正如您所指出的,同步方法仅存在于 .NET 程序集中,而您将在 SL 程序集中找到与 XAP 相关的 APIs。其他 "missing" 或更改的功能包括文件 I/O 和 .config 文件处理。

一般来说,DF 试图合理化跨环境的 API 和行为,尽管在底层实现中可能存在细微差异或性能影响。例如,WCF、组合 (MEF)、序列化和反射是我们发现的一些领域,它们在不同环境中的工作并不总是完全相同,尽管我们已经尝试在 DevForce 中缓解这些问题,因此应用程序看不到问题。 DF 在非 .NET 环境中也有一些属性(主要是 ODATA 和数据注释)的 shim/dummy 实现,如果您需要真实类型,这可能会导致问题。

我已经扫描了一些可能不明显的差异:1) 在非 .NET 中克隆时需要无参数构造函数,2) ProvideEntityAspect 和 ProvideComplexAspect 属性使用的编译时验证是仅在 .NET 中完成,3) 尝试使用 FIPS 参数集执行 encryption/decryption 将在非 .NET 中抛出 NotSupportedException。

设计时支持也存在差异。在 SL 中,当使用 ECS 或使用基于代码优先模型的设计时数据时,VS 将抛出奇怪的安全和序列化异常。

我还应注意,如果您正在对 SL 代码进行 .NET 单元测试,则不能假定该代码也适用于 SL。您确实也需要在 SL 中进行测试以避免意外。

如果您对 DevForce 的任何特定领域有疑问或运行任何意外的环境差异,请告诉我们。