【问题标题】:How can it be that .Net cannot find the System assembly?.Net 怎么会找不到系统程序集?
【发布时间】:2013-11-19 23:32:12
【问题描述】:

我在执行一些集成测试时遇到以下错误:

显示名称为“System”的程序集未能在 ID 为 4 的 AppDomain 的“Load”绑定上下文中加载。失败的原因是:System.IO.FileNotFoundException:无法加载文件或程序集“System, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其依赖项之一。系统找不到指定的文件。

这些测试过去可以工作,我不知道怎么会找不到这样一个基本的dll。此外,系统程序集已经加载:

顺便说一句,执行的代码正在创建 AppDomain 以执行集成测试,以防万一。

编辑:看起来我们已经安装了所需的框架:

【问题讨论】:

  • 只是为了检查:文件是否实际位于上述路径中?

标签: .net integration-testing appdomain assembly-resolution


【解决方案1】:

当测试环境没有安装目标框架时,可能会发生此错误。特别是当您使用后期绑定时。如果您使用的是 IOC/DI,可能就是这种情况。

请注意,也可能导致(由于后期绑定)需要其他(额外).NET 版本。如果程序中使用的组件之一是针对 .NET 2.0 编译的,则可能还需要安装该框架版本。

【讨论】:

    【解决方案2】:

    当您的应用程序针对的 DotNet 框架版本与您正在测试的机器上安装的版本不同时,可能会发生这种情况。我注意到所需的所有这些程序集都是 4.0,但看起来您正在显示 VS2012+ 中模块窗口的输出,因此很可能安装了 4.0。

    接下来,我们查看运行集成测试的运行时环境。因为在 DotNet 中,用于所有程序集加载的框架版本由初始可执行文件定义。通常这不是问题,因为如果您使用 4.0 exe,并参考 2.0 框架,那么通常可以替换新的。但是,如果您运行 2.0 版本,那么它将无法解析 4.0 程序集。

    如果您使用的是 NUnit,那么您可以使用一些技巧来帮助我解决这个问题。 http://nunit.org/index.php?p=runtimeSelection&r=2.6.3

    【讨论】:

      【解决方案3】:

      我终于找到了问题:app.config 由于“太宽”的搜索和替换而损坏,似乎这是奇怪的系统负载的罪魁祸首。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-17
        • 2012-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-24
        • 1970-01-01
        相关资源
        最近更新 更多