【问题标题】:NUnit unable to load dll with String Key NameNUnit 无法使用字符串键名加载 dll
【发布时间】:2012-04-24 22:40:20
【问题描述】:

我有一个项目,其中有一些 C# 类,我在我的 ant 脚本中使用 csc 构建这些类。我还编写了一些单元测试,我想用 NUnit2.6 进行测试,如果我安装,我的测试类和实际类指的是一个用字符串键名 (.snk) 编译的 DLL我的 GAC (gacutil /i myDLL.dll) 中的这个 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

【问题讨论】:

    标签: dll nunit snk


    【解决方案1】:

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

    我确定它不是依赖项(在消息中提到)的原因是因为将程序集放入 gac 时解决了这种情况。由于程序集是强命名的,因此不太可能导致此错误。

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

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

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

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

    【讨论】:

    • 在执行测试之前,我已经在 PATH 环境变量中添加了程序集路径......我还需要添加到其他路径吗?
    • 如果它在路径环境变量中,它不会有任何区别。您必须遵循此处详细描述的 .net 的探测路径 msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.110).aspx 您的应用程序/测试根本看不到程序集检查程序集是否被引用并且位于相应的 bin/debug bin/release 目录或主 bin 中的网络应用程序。
    • 谢谢,我已将我的外部 DLL 复制到 NUnit/bin 目录中,一切正常。感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2022-06-22
    • 1970-01-01
    • 2017-06-26
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多