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