(这适用于我团队中的其他人,因此很可能与我的机器的安装有关。)
我正在使用NUnit GUI测试运行程序。当我使用File/Open加载测试的程序集时,我会得到一个错误。
该项目是用Visual 2005构建的,Visual的“关于”框给出了.NET框架版本为2.0.50727 SP2。
这是我得到的错误:
程序集未加载
System.BadImageFormatException :无法加载文件或程序集“测试、Version=0.0.0.0、Culture=neutral、PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。您可能试图加载使用CLR版本构建的程序集,而不是当前运行NUnit的版本(2.0.50727),或者试图将64位程序集加载到32位进程中。
我刚刚使用程序集绑定日志查看器 (Fuslogvw.exe)查看了融合日志,这就是我所看到的,它没有任何意义,正如我告诉它看所有绑定。
*** Assembly Binder Log Entry (05/11/2010 @ 11:55:26) ***
The operation was successful.
Bind result: hr = 0x0. The operation completed successfully.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll
Running under executable C:\Program Files (x86)\NUnit 2.5.7\bin\net-2.0\nunit.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = KSSRETAIL\ian.ringrose
LOG: DisplayName = System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
(Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/NUnit 2.5.7/bin/net-2.0/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = nunit.exe
Calling assembly : nunit-gui-runner, Version=2.5.7.10213, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files (x86)\NUnit 2.5.7\bin\net-2.0\nunit.exe.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config.
LOG: Post-policy reference: System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
LOG: Reusing an assembly instance that was previously loaded (C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll).
多亏了Lasse给我指明了正确的方向。当我运行nunit-x86.exe时,我可以加载测试DLL。因此,系统中必须有一个32位的DLL .然而,仍然不知道如何获得一组有用的日志,以便以逻辑的方式跟踪这类问题。
发布于 2010-11-05 03:29:32
这有几个原因:
1) .NET框架的版本。确保加载了正确的版本,或者在配置(app.config)中定义它
2)版本地狱:一些程序集使用与其他程序集不匹配的版本,而您可以在本地文件夹中使用一个版本。这通常是最有可能的原因。
3)您没有对程序集的引用,但这是您的系统所需要的,并且可能是动态加载的(nhibernate有一些这样的dll),并且它们不会自动复制到本地的test bin文件夹中。在本地文件夹中添加对那些DLL的引用。
4)位32位/ 64位,如果在任何点都没有加载托管代码
要找出答案,请检查以上所有内容。我还建议您通过sysinternals运行进程监视器。在文件加载事件上,您将看到一个未找到的文件事件。这需要一段时间来适应,但它是一个非常好的工具。
https://stackoverflow.com/questions/4105398
复制相似问题