我有一个Visual Studio项目(包含NUnit测试)和Platform目标:任何CPU (调试和发布)。 此项目使用以下配置引用dll(Reference.dll):
(from ILSpy)
// Architecture: AnyCPU (64-bit preferred)
// This assembly contains unmanaged code.
// Runtime: .NET 4.0
[assembly: CLSCompliant(true)]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyProduct("DotNet")]
[assembly: AssemblyTitle("DotNet")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
[assembly: SecurityRules(SecurityRuleSet.Level1)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, UnmanagedCode = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
在构建项目时,将生成Tests.dll,其配置如下。
(from ILSpy)
// Architecture: AnyCPU (64-bit preferred)
// Runtime: .NET 4.0
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyTrademark("")]
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: ComVisible(false)]
[assembly: Guid("37AAB39F-D11B-4C7D-887C-A056A63177A3")]
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
我使用Resharper以下列首选项运行NUnit测试:
默认平台架构:基于测试项目的目标平台自动
默认的.NET框架版本:基于test projet的目标平台自动
当执行测试用例并使用Reference.dll中的任何方法时,我得到以下异常: System.BadImageFormatException:无法加载文件或程序集''或其中一个依赖项。尝试加载格式不正确的程序。
当我将Tests.dll的目标平台更改为 x86 时,它可以正常工作。 任何人都可以解释为什么两个平台的任何CPU 都不起作用。
答案 0 :(得分:0)
这似乎失败了,因为正在测试的程序集(不是测试的程序集)是32位。如果测试项目设置为AnyCPU,它将以64位运行,并且无法加载正在测试的程序集。
您需要将测试项目设置为与正在测试的程序集或其依赖项具有相同的位。 ReSharper在决定是否应该以32位或64位运行时只查看测试程序集。