我有一个包含我的主项目和使用NUnit的测试项目的解决方案。所有东西都编译但是当我运行NUnit时,我会在测试加载后得到以下异常,并且测试失败。我添加了主项目作为参考,我在外部工具设置中的NUnit参数中有 $(ProjectDir)bin / Debug / $(TargetName)$(TargetExt),空白的初始目录。
MyMainProjectTests.Database.TestAddDelete:
System.BadImageFormatException : Could not load file or assembly 'MyMainProject,
Version=1.1.1.0, Culture=neutral, PublicKeyToken=null' or one of its
dependencies. An attempt was made to load a program with an incorrect format.
TearDown : System.Reflection.TargetInvocationException : Exception has been
thrown by the target of an invocation.
----> System.BadImageFormatException : Could not load file or assembly
'ChickenPing, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null' or one
of its dependencies. An attempt was made to load a program with an incorrect
format.
经过几个小时的搜索后,我发现的唯一一件事就是VS2005中提到/ bin和/ obj目录的一个错误,但提供的答案没有帮助。
任何解决方案?
答案 0 :(得分:15)
我没有将NUnit设置为外部工具,而是将单元测试项目设置为StartUp项目。在项目的Properties屏幕中,将Start Action设置为“Start external program”并将其指向nunit.exe
。在“开始选项”部分中,我在“命令行参数”框中指定了测试程序集(无需路径)。此时,只需按 F5 即可启动NUnit。
答案 1 :(得分:11)
使用nunit-x86.exe而不是nunit.exe作为跑步者。
一个更好的长期解决方案可能是购买ReSharper,其中包括一个更好的NUnit测试运行器,它完全集成到Visual Studio中。它会自动检测您的.NET项目类型(x68或x64)。 ReShaper带有tons of other features,其中单元测试只有一个。他们的测试运行器还集成了他们的DotCover code coverage analyser。
您可能会发现Visual Studio的更高版本需要使用ReSharper。最新版本与Visual Studio 2013 Community Edition一起使用,您可以免费获得,但我知道您可能会遇到从这样一个相当古老的VS2005项目升级某些项目功能的问题。
我与ReSharper没有任何关系。
答案 2 :(得分:7)
你在x64上运行吗?如果从x86加载x64位,则会出现该错误,反之亦然。此外,您尝试创建的路径应该是$(TargetPath)宏。
答案 3 :(得分:5)
将测试项目的“平台目标”设置为“x86”。
答案 4 :(得分:0)
您的主要项目是.exe还是.dll?较旧版本的.NET无法引用.exe,因此可能成为问题。
在任何一种情况下,如果主程序集没有最终到达测试程序集可访问的某个地方(例如,在同一目录中),我会发现问题。您可以通过让Visual Studio将引用的(主)程序集复制到本地目录来检查,如果不这样做的话。
“尝试加载格式不正确的程序。”让我想知道“缺失的集会”理论是否正确,但没有更多的信息,这是我能想到的最好的猜测。
答案 5 :(得分:0)
进入NUnit安装(例如:C:\ Program Files(x86)\ NUnit 2.6.3 \ bin)位置并打开nunit-86.exe。