ReSharper Testrunner 在 x64 上失败并出现 BadImageFormatException
ReSharper Testrunner fails on x64 with BadImageFormatException
我有一个 Visual Studio 解决方案,我使用 MSTest 进行单元测试,并且想使用 ReSharper Test运行ner,因为我认为 Visual Studio Test Explorer 是一起工作真的很痛苦。我的整个解决方案是为 x64 构建的,因为我有一些专门为 x64 编译但不适用于 x86 的依赖程序集。
我的单元测试 运行 在 VS Test Explorer 中很好,但在 ReSharper Test运行ner 中失败了。
抛出以下异常,就在它到达单元测试的第一行之前:
Unable to get type xxx.xxx.xxx. Error: System.BadImageFormatException: Die Datei oder Assembly "file:///D:\path\to\unit\test\project\bin\Debug\xxx.xxx.xxx.dll" oder eine Abhängigkeit davon wurde nicht gefunden. Es wurde versucht, eine Datei mit einem falschen Format zu laden.
抱歉,德语例外。它只是一个 'typical' BadImageFormatException,其中 xxx.xxx.xxx 是我的单元测试项目的类型。
Stacktrace 表明异常是从
抛出的
Microsoft.VisualStudio.TestPlatform.MSTestFramework.TypeCache.LoadType(String typeName, String assemblyName)
我知道在 Whosebug 上已经有很多类似的问题,但我已经尝试了我找到的所有可能的解决方案(没有任何效果),因此我认为我的问题出在其他地方。
到目前为止我尝试和检查的内容:
- 我仔细检查了我的解决方案中的每个 项目都将编译为 x64(即使在发布模式下)——一切似乎都很好
- MSTest 的默认处理器架构明确设置为 x64(可能这就是它使用内置测试资源管理器的原因)
- 虽然应该根据项目的平台来决定,但我在 ReSharper Test运行ner 中明确将平台设置为 x64
- 我什至将 ReSharper 的单元测试设置修改为 强制 在 64 位进程中执行单元测试
- 在 ReSharper 设置中禁用程序集的卷影复制(只是因为我现在非常沮丧,并在我开始创建这个问题之前切换到试错模式)
令人恼火的是,测试 运行 在 Test Explorer 中可以正常运行,但在 ReSharper 中却不行,尽管两者都已设置为 x64。我是否缺少需要修改的特定设置?还是将 ReSharper 与 MSTest 结合使用时存在一些已知问题?我也可能会考虑改用 nUnit,但我需要修改所有测试,所以我最好继续使用 MSTest。
另外一些关于版本和东西的信息(不知道是否有帮助):
- Visual Studio 高级版 2013 v12.0.30110.00 更新 1
- .NET Framework 4.5 用于解决方案中的每个项目
- ReSharper 8.2 C# 版,内部版本 8.2.0.2160
经过一些额外的研究,我在 ReSharper 社区中发现了一个 similar post,这表明 ReSharper 默认配置为在应用程序的元数据中创建和使用测试设置文件,即 not 配置为使用 x64 架构。我必须在我的解决方案(位于解决方案项下)上创建一个自定义 TestSettings 文件,将其设置为在 x64 中强制 运行,然后编辑 ReSharper 设置以使用此自定义 TestSettings 文件而不是默认文件。我仍然不知道为什么 ReSharper 不使用为 MSTest 指定的默认处理器架构,并且还忽略我在 ReSharper 设置中明确指定的设置。
但不管怎样,它现在可以正常工作了。
我有一个 Visual Studio 解决方案,我使用 MSTest 进行单元测试,并且想使用 ReSharper Test运行ner,因为我认为 Visual Studio Test Explorer 是一起工作真的很痛苦。我的整个解决方案是为 x64 构建的,因为我有一些专门为 x64 编译但不适用于 x86 的依赖程序集。
我的单元测试 运行 在 VS Test Explorer 中很好,但在 ReSharper Test运行ner 中失败了。
抛出以下异常,就在它到达单元测试的第一行之前:
Unable to get type xxx.xxx.xxx. Error: System.BadImageFormatException: Die Datei oder Assembly "file:///D:\path\to\unit\test\project\bin\Debug\xxx.xxx.xxx.dll" oder eine Abhängigkeit davon wurde nicht gefunden. Es wurde versucht, eine Datei mit einem falschen Format zu laden.
抱歉,德语例外。它只是一个 'typical' BadImageFormatException,其中 xxx.xxx.xxx 是我的单元测试项目的类型。 Stacktrace 表明异常是从
抛出的Microsoft.VisualStudio.TestPlatform.MSTestFramework.TypeCache.LoadType(String typeName, String assemblyName)
我知道在 Whosebug 上已经有很多类似的问题,但我已经尝试了我找到的所有可能的解决方案(没有任何效果),因此我认为我的问题出在其他地方。
到目前为止我尝试和检查的内容:
- 我仔细检查了我的解决方案中的每个 项目都将编译为 x64(即使在发布模式下)——一切似乎都很好
- MSTest 的默认处理器架构明确设置为 x64(可能这就是它使用内置测试资源管理器的原因)
- 虽然应该根据项目的平台来决定,但我在 ReSharper Test运行ner 中明确将平台设置为 x64
- 我什至将 ReSharper 的单元测试设置修改为 强制 在 64 位进程中执行单元测试
- 在 ReSharper 设置中禁用程序集的卷影复制(只是因为我现在非常沮丧,并在我开始创建这个问题之前切换到试错模式)
令人恼火的是,测试 运行 在 Test Explorer 中可以正常运行,但在 ReSharper 中却不行,尽管两者都已设置为 x64。我是否缺少需要修改的特定设置?还是将 ReSharper 与 MSTest 结合使用时存在一些已知问题?我也可能会考虑改用 nUnit,但我需要修改所有测试,所以我最好继续使用 MSTest。
另外一些关于版本和东西的信息(不知道是否有帮助):
- Visual Studio 高级版 2013 v12.0.30110.00 更新 1
- .NET Framework 4.5 用于解决方案中的每个项目
- ReSharper 8.2 C# 版,内部版本 8.2.0.2160
经过一些额外的研究,我在 ReSharper 社区中发现了一个 similar post,这表明 ReSharper 默认配置为在应用程序的元数据中创建和使用测试设置文件,即 not 配置为使用 x64 架构。我必须在我的解决方案(位于解决方案项下)上创建一个自定义 TestSettings 文件,将其设置为在 x64 中强制 运行,然后编辑 ReSharper 设置以使用此自定义 TestSettings 文件而不是默认文件。我仍然不知道为什么 ReSharper 不使用为 MSTest 指定的默认处理器架构,并且还忽略我在 ReSharper 设置中明确指定的设置。
但不管怎样,它现在可以正常工作了。