无代码变更后单元测试意外失败:System.Management.ManagementException
问题
未修改任何代码的情况下,执行单元测试时意外失败,抛出如下异常:
System.TypeInitializationException: The type initializer for 'DiffEngine.ProcessCleanup' threw an exception. System.TypeInitializationException The type initializer for 'DiffEngine.ProcessCleanup' threw an exception. at DiffEngine.ProcessCleanup.Kill(String command) at DiffEngine.DiffRunner.Kill(String tempFile, String targetFile) in C:\projects\diffengine\src\DiffEngine\DiffRunner_Kill.cs:line 32 at VerifyEngine.ProcessEquals() in /_/src/Verify/Verifier/VerifyEngine.cs:line 179 at VerifyEngine.ThrowIfRequired() in /_/src/Verify/Verifier/VerifyEngine.cs:line 119 at InnerVerifier.VerifyInner(Object target, Func`1 cleanup, IEnumerable`1 targets) in /_/src/Verify/Verifier/InnerVerifier_Inner.cs:line 33 at InnerVerifier.Verify[T](T target) in /_/src/Verify/Verifier/InnerVerifier_Json.cs:line 80 at VerifyXunit.Verifier.<>c__DisplayClass1_0.<<Verify>b__0>d.MoveNext() in /_/src/Verify.Xunit/Verifier.cs:line 30 --- End of stack trace from previous location --- at Xunit.Sdk.TestInvoker`1.<>c__DisplayClass48_1.<<InvokeTestMethodAsync>b__1>d.MoveNext() in C:\Dev\xunit\xunit\src\xunit.execution\Sdk\Frameworks\Runners\TestInvoker.cs:line 264 --- End of stack trace from previous location --- at Xunit.Sdk.ExecutionTimer.AggregateAsync(Func`1 asyncAction) in C:\Dev\xunit\xunit\src\xunit.execution\Sdk\Frameworks\ExecutionTimer.cs:line 48 at Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) in C:\Dev\xunit\xunit\src\xunit.core\Sdk\ExceptionAggregator.cs:line 90 System.Management.ManagementException Ungültige Klasse at System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode) at System.Management.ManagementObjectCollection.ManagementObjectEnumerator.MoveNext() at WindowsProcess.FindAll()+MoveNext() in C:\projects\diffengine\src\DiffEngine\Process\WindowsProcess.cs:line 38 at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source, Int32& length) at System.Linq.OrderedEnumerable`1.ToList() at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at DiffEngine.ProcessCleanup.Refresh() in C:\projects\diffengine\src\DiffEngine\Process\ProcessCleanup.cs:line 36 at DiffEngine.ProcessCleanup..cctor() in C:\projects\diffengine\src\DiffEngine\Process\ProcessCleanup.cs:line 30
已完成的排查步骤
- 重新安装.NET SDK和Rider
- 重新拉取项目master分支代码
- 确认团队其他成员的单元测试可正常运行
分析与解决方法
异常根源是System.Management.ManagementException: Ungültige Klasse(德语,意为“无效类”),说明DiffEngine通过WMI(Windows管理规范)查询Windows进程时,找不到对应WMI类,大概率是本地WMI存储库损坏或权限问题。
尝试以下解决步骤:
修复WMI存储库
以管理员身份打开命令提示符,执行命令:winmgmt /resetrepository该命令会重置WMI存储库,修复损坏的类定义。
检查WMI服务状态
打开服务管理器,找到Windows Management Instrumentation服务,确认其处于运行状态;若未运行,手动启动该服务。验证WMI类可用性
运行wbemtest命令打开WMI测试工具:- 点击“连接”,命名空间输入
root\cimv2,点击“连接” - 点击“查询”,输入
SELECT * FROM Win32_Process,点击“应用”
若能正常返回进程列表,说明WMI类正常;若报错,需进一步修复WMI。
- 点击“连接”,命名空间输入
清理项目编译缓存
删除项目目录下的bin和obj文件夹,重新生成项目,避免残留缓存影响测试运行。检查用户权限
确保当前用户拥有访问WMI的权限,特别是读取Win32_Process类的权限。可通过组策略或WMI权限设置工具调整。
内容的提问来源于stack exchange,提问作者AnneTest123
相关产品推荐
相关产品推荐

