【问题标题】:Error accessing project resource from Silverlight Test project从 Silverlight 测试项目访问项目资源时出错
【发布时间】:2011-01-15 12:39:09
【问题描述】:

我正在 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

【问题讨论】:

    标签: silverlight unit-testing resources


    【解决方案1】:

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

    提供的 zip 已损坏,因此我无法直接查看该项目,但我相当确定您创建的测试项目是完整的 .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();
    }
    

    【讨论】:

    • 我已将测试项目重新上传到其他位置。
    • 我正在创建一个 Silverlight 类库测试项目,并且我引用了 Microsoft.VisualStudio.QualityTools.UnitTestFramework 程序集。它里面有 TestClassAttribute 和 TestMethodAttribute 。如果您的 Silverlight 测试项目中没有 Microsoft.VisualStudio.QualityTools.UnitTestFramework,那么我想您无法使用 [TestClass] 等。
    • 请注意,我已将资源文件添加到项目中,问题是我无法在测试运行期间使用该添加的资源
    • 感谢您提供解决方案。更新了我的答案。
    • 我使用了名为“Silverlight 单元测试应用程序”的在线模板。它添加了对 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 的引用。我已经卸载了 Visual Studio、Silverlight 工具等并重新安装了它们。令我惊讶的是,测试现在正在使用(默认)引用 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll。
    猜你喜欢
    • 2012-03-04
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多