2013-06-01 26 views
2

我正在尝试编写一个单元测试,以访问与项目关联的资源。这是一般结构。资源具有旨在由MyLibClass使用字符串和类设置为en-US如何从另一个(测试).Net dll访问.Net DLL中的嵌入式资源?

Solution1 
--MyLibrary 
    --Properties 
    --AssemblyInfo.cs 
    --Resources.resx 
    --Resource.Designer.cs 
    --References 
    --MyLibClass.cs 

--MyLibrary.Tests 
    --Properties 
    --AssemblyInfo.cs 
    --References 
    --MyLibClassTests.cs 

--MainProject 

的测试需要设置类,并通过它的ResourceManager因为我试图使用依赖注入。当我尝试在测试中使用下面的代码进行加载时,出现以下错误。

由于资源被嵌入到MyLibrary.dll中,MyLibraryTest.dll如何访问它?

resmgr = new ResourceManager("MyLibrary", 
         Assembly.GetExecutingAssembly()); 

误差在NUnit的

MyLibrary.Tests. MyLibClassTests.IsInValidMyProperty_Blank: 
An unexpected exception type was thrown 
Expected: System.ArgumentException 
but was: System.Resources.MissingManifestResourceException : Could not find any 
resources appropriate for the specified culture or the neutral culture. Make sure 
"MyLibrary.resources" was correctly embedded or linked into assembly "MyLibrary.Tests" 
at compile time, or that all the satellite assemblies required are loadable and 
fully signed. 

所以经过考虑之后,DLL的是在不同的项目文件夹。

有没有更好的方法来解决这个问题?

+0

executingassembly是测试的DLL,你想,你正在测试 –

回答

2

在您的示例中,您已经传递程序集来加载资源 - 您只是出于某种原因使用不包含正在查找的资源的程序集。最有可能你需要通过MyLibClass所在的同一个程序集,而不是Assembly.GetExecutingAssembly(),我假设你给出了测试代码的汇编。

resmgr = new ResourceManager("MyLibrary", 
    typeof(MyLibClass).Assembly); 
+0

有道理的组装,但它告诉我,“MyLibClass”是一个命名空间,但像一个“类型”中。 –

+0

@RichShealer - 这是你的代码我不知道哪个类在那个资源所在的程序集中。通常类名与文件名匹配,所以我假定“MyLibClass”是类的名称,但它似乎是代码中的名称空间。只需在该程序集中找到一个班级并使用它。请注意,如果您将类和名称空间命名为相同的名称,则由于名称解析不时会出现一些令人困惑的问题。 –

+0

这有帮助。我从来没有想到我需要一堂课。我认为我需要更高级的东西来识别模块。 –