我正在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
示例答案 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();
}