Silverlight 4单元测试;加载了错误的mscorlib版本

时间:2011-12-07 18:39:06

标签: c# unit-testing silverlight-4.0

我一直在尝试为MSTest中的Silverlight 4项目开发一些单元测试,但是我在运行它时遇到了一些麻烦。在我的代码中,我使用了一些表达式(System.Linq.Expressions),并且在正常情况下运行程序时它们正常工作。如果在单元测试期间遇到任何此代码,我会在类型'AppDomain'上得到'MissingMethodException'

我已经将问题追溯到“appDomain”在mscorlib.dll中定义的事实。当我正常运行程序时,加载版本2.0.5.0的mscorlib(Silverlight 4),并在单元测试下加载版本2.0.0.0。我的测试和普通项目中的所有引用都是正确的,所以我无法弄清楚为什么MSTest加载了错误的版本。

有没有办法让MSTest或VSTestHost实际加载正确版本的mscorlib? (2.0.5.0)

2 个答案:

答案 0 :(得分:1)

问题是您使用一个版本的.NET框架来运行测试,另一个版本是在正常情况下运行您的代码。 Silverlight和.NET足够兼容,Silverlight程序集通常可以在没有问题的情况下从.NET中使用(即使Visual Studio为您提供了引用警告),但也有一些例外。

例如,以这种方式运行Silverlight代码,您无法使用任何Silverlight UI类。 (任何FrameworkElement,DependencyObject,Dispatcher或类似的)因为这些需要正确的运行时。 AppDomain也属于这一类,我并不感到惊讶。

要解决此问题,您可以确保仅测试与上述类不相关的代码,也可以将源代码交叉编译为完整的.NET项目。后者不能解决您的不兼容问题,但允许您编译稍微不同的代码版本,以便让代码编译和运行干净。

请注意,mscorlib不像其他任何.NET程序集一样,它充满了讨厌的本机代码引用,并且不能在其预期的运行时之外以任何有意义的方式使用。

答案 1 :(得分:-1)

SL4与MSTest不兼容。您必须创建一个SL4单元测试项目(这是一个特殊项目) - 然后将其设置为启动项目。在运行此项目时,使用小UI(在浏览器中)执行单元测试,显示已执行单元测试的结果。

修改 有些人使用MSTest进行单元测试取得了成功。但是,为了做到这一点,你必须做几个技巧。单元测试不在SL4环境中执行,因此单元测试结果无效。