从Silverlight Test项目访问项目资源时出错

时间:2011-01-15 12:39:09

标签: silverlight unit-testing resources

我正在Visual Studio 2010中对Silverlight 4进行单元测试。

问题是我无法使用添加到测试项目的资源。

在测试运行期间,当我尝试访问这样的资源时:

[TestClass]
public class Class1
{
    [TestMethod]
    public void Test1()
    {
        // here I have an exception
        Debug.WriteLine(Properties.Resources.String1);

,我得到一个例外:

System.TypeLoadException: Unable to load type "System.Runtime.Versioning.TargetFrameworkAttribute" from assembly "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

堆栈跟踪

System.ModuleHandle.ResolveMethod(Int32 methodToken, RuntimeTypeHandle* typeInstArgs, Int32 typeInstCount, RuntimeTypeHandle* methodInstArgs, Int32 methodInstCount)
System.ModuleHandle.ResolveMethodHandle(Int32 methodToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
System.Reflection.CustomAttributeData..ctor(Module scope, CustomAttributeRecord caRecord)
System.Reflection.CustomAttributeData.GetCustomAttributes(Module module, Int32 tkTarget)
System.Reflection.CustomAttributeData.GetCustomAttributes(Assembly target)
System.Resources.ResourceManager.GetNeutralResourcesLanguage(Assembly a, UltimateResourceFallbackLocation& fallbackLocation)
System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
System.Resources.ResourceManager.GetString(String name, CultureInfo culture)
SilverlightClassLibraryTestProject1.Properties.Resources.get_String1() in D:\Work\Temp\SilverlightClassLibraryTestProject1\SilverlightClassLibraryTestProject1\Properties\Resources.Designer.cs: line 68
SilverlightClassLibraryTestProject1.Class1.Test1() in D:\Work\Temp\SilverlightClassLibraryTestProject1\SilverlightClassLibraryTestProject1\Class1.cs: line 13

我可以看到,Visual Studio创建的Silverlight测试项目包含对Microsoft.VisualStudio.QualityTools.UnitTestFramework的引用,这是一个.net Framework 4.0程序集,而不是Silverlight程序集。

我的问题是:现在可以在ResourceManager的帮助下使用Silverlight测试项目中的资源了吗?如果是,那应该做什么?

以下是test project

示例

1 个答案:

答案 0 :(得分:0)

当我创建Silverlight测试项目时,我没有那个参考。此外,Silverlight项目在项目属性中没有“资源”选项卡,它看起来像您的项目(完整的.NET项目将项目资源放在Properties.Resources命名空间下)。

提供的zip已损坏,因此我无法直接查看该项目,但我相当确定您创建的测试项目是Full .NET测试项目而不是Silverlight测试项目。您需要确保使用Silverlight测试项目。然后,您可以通过添加新项目添加资源文件 - >一般 - >资源文件。

编辑:

您的项目正在引用完整的.NET框架测试DLL:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

您需要参考:

C:\Program Files (x86)\MSBuild\..\Microsoft SDKs\Silverlight\v4.0\Toolkit\Apr10\Testing\Microsoft.Silverlight.Testing.dll

C:\Program Files (x86)\MSBuild\..\Microsoft SDKs\Silverlight\v4.0\Toolkit\Apr10\Testing\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll

请注意,这些DLL可以在Silverlight Toolkit中找到。此外,您似乎创建了一个Silverlight类库 - 您应该使用的模板称为“Silverlight单元测试应用程序”。这是因为Silverlight测试目前要求您在浏览器中运行它们,因此它们需要一个“应用程序”类。您可以使用普通的Silverlight应用程序模板,但您必须引用之前提到的测试DLL并在应用程序代码中进行以下更改:

private void Application_Startup(object sender, StartupEventArgs e)
{
    RootVisual = UnitTestSystem.CreateTestPage();
}