【问题标题】:System.IO.FileNotFoundException: 'Could not load file or assembly' on a local machineSystem.IO.FileNotFoundException:“无法在本地计算机上加载文件或程序集”
【发布时间】:2021-08-04 15:27:14
【问题描述】:

我正在对我最近加入的一个项目实施单元测试,但遇到了一个令人费解的错误。我有这个课程LoggerSettingsManager,我正在测试各种功能。调用某些函数时,一切正常。但是当调用相同的类但不同的函数时,我收到以下错误(该错误有一个内部代码_COMPlusExceptionCode -532462766):

Could not load file or assembly 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 
The system cannot find the file specified.

这些是LoggerSettingsManager 需要的库:

许多功能似乎运行良好。这似乎只在函数引用MessageBoxSystem.Windows.Forms 的一部分)时才会发生,即使这行代码从未真正执行过。

当我调用例如以下函数时会出现问题。然而,让我有点困惑的是,在导致错误之前我什至无法进入函数,好像函数的内容不是问题,而是与类关联的某个库。

public void UpdateLoggerSettings(string measurementType)
{
    ...

    try
    {
        _deviceSettings.GetLoggerSettings(LoggerSettings);

        if (LoggerSettings.DataIsValid)
            _deviceSettingsWin.UpdateWindowParameter();
    }
    catch (ArgumentException ex)
    {
        MessageBox.Show("Requesting Data Logger Settings: Packet contained invalid time stamps\n\n" +
            ex.Message + "\n\n" + ex.StackTrace);
    }
}

这些是LoggerSettingsManager 中的usings

using ExpoMRF4Utility.ExpomRF4; // internal company library
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Forms;

我是否需要“全新安装”System.Windows.Forms?我看过其他关于此错误的文章,但似乎很多问题与服务器-客户端相关(我的绝对是 不是)或以另一种方式具体。帮助表示赞赏。

编辑:删除和添加引用并没有解决问题..

编辑 2:在 pastebin 上添加最少的可重现文件:LoggerSettingsManagerLoggerSettingsManager_Tests

【问题讨论】:

  • 您不能单步执行该函数,因为第一次将要调用UpdateLoggerSettings,JIT 编译器会尝试编译该函数。由于 MessageBox(在 System.Windows.Forms 中,它显然无法找到)而失败并抛出您看到的异常。包含一个最小的可重现示例可能会有所帮助,但您可能还想检查您的项目所针对的 .NET 平台。这个问题stackoverflow.com/questions/56401372/… 看起来很相似。
  • 您是否查看过您的项目正在使用的参考资料?他们中的任何一个都有一个小黄色三角形吗?如果是这样,我会删除然后重新添加它们。
  • 您是添加了对您的测试项目的引用还是只是对被测项目的引用?
  • @pmcoltrane 这是我自己的理解,编译器只检查该特定函数中所需的代码,如果无法加载则抛出。我添加了指向具有最少可重现文件的两个 pastebin 文件的链接。
  • @David.Warwick 在同一个分支上,我有一些带有黄色小三角形的引用。但是它们有相同名称的重复项,所以我删除了它们。我现在删除了重复项并重新添加了它们,但它似乎没有太大变化。

标签: c# visual-studio winforms


【解决方案1】:

我似乎已经能够通过创建一个不同的测试项目来解决这个问题。在下图中,有 Visual Studio 提供的用于创建测试项目的选项。以前我选择了一个xUnit Test Project,结果证明它只运行.NET Core,并且不可能引用与被测项目相同版本的.NET,或者引用“缺失”库System.Windows.Forms

现在我创建了一个Unit Test Project (.NET Framework),同时添加了 xUnit 并删除了 MSTest。这似乎成功了。我希望这对遇到类似问题的人有所帮助。

【讨论】:

  • 很高兴听到您的问题已经解决,您可以点击“✔”将您的回复标记为答案。它还将帮助其他人解决类似的问题。
  • 啊,是的,谢谢!我不能立即这样做,但现在它可以工作了。感谢您指出:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2023-02-07
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多