NUnit无法使用String Key Name加载dll

时间:2012-04-24 22:40:20

标签: dll nunit snk

我有一个项目,其中我有一些C#类,我在我的ant脚本中使用csc构建。我还编写了一些单元测试,我想用 NUnit2.6 进行测试,我的测试类和实际类引用一个用String Key Name(.snk)编译的DLL,如果我安装的话我的GAC中的DLL(gacutil / i myDLL.dll)一切正常。一旦我从gac中卸载这个DLL,当我尝试使用NUnit运行我的测试时,我在构建期间得到了所有测试的跟随错误;

Test Error : fromJDynTest1
 [exec]    System.IO.FileNotFoundException : Could not load file or assembly 'myDLL, Version=5.1.0.0, Culture=neutral, PublicKeyToken=c0409b584f86b2d6' or one of its dependencies. The system cannot find the file specified.
 [exec]    at fromJDynTest1()
...
...

有谁知道如何解决这个问题。如果您需要任何其他信息,请与我们联系。

由于

-

SJunejo

1 个答案:

答案 0 :(得分:1)

您正在测试的代码在将其放入gac中时无法看到有问题的组件,它可以看到组件。您需要确保正在测试的代码在编译时在bin目录中具有程序集(可能在程序集引用的项目中将copy local设置为false)。

我确定它不是依赖项(在消息中提到)的原因是因为当程序集放在gac中时情况得到解决。此错误不太可能是因为程序集强名称。

未通过测试代码引用程序集,并且测试代码没有引用或具有相同的问题(不在其编译目录中)。

如果您发布了项目的实际测试或结构,将会有所帮助。

.net按如下方式定位程序集:

  1. 通过检查适用的配置文件(包括应用程序配置文件,发布者策略文件和计算机配置文件)来确定正确的程序集版本。如果配置文件位于远程计算机上,则运行时必须首先找到并下载应用程序配置文件。
  2. 检查程序集名称是否已绑定到之前,如果是,则使用先前加载的程序集。如果它失败之前它现在会再次失败。
  3. 检查gac。如果在那里找到程序集,则运行时使用此程序集。
  4. 程序集的探测器(如果在文本编辑器中打开.csproj文件,您将看到提示路径,试图帮助.net找到程序集。)