在 VS 2017 中针对完整的 .net 框架 asp.net 核心项目运行 XUnit 2.2.0 单元测试时出现 System.BadImageFormatException

Posted

技术标签:

【中文标题】在 VS 2017 中针对完整的 .net 框架 asp.net 核心项目运行 XUnit 2.2.0 单元测试时出现 System.BadImageFormatException【英文标题】:System.BadImageFormatException when running XUnit 2.2.0 unit test in VS 2017 against a full .net framework asp.net core project 【发布时间】:2017-03-08 18:52:38 【问题描述】:

关于我的设置的信息:

Resharper 2016.3.2 XUnit 2.2.0 VS 2017 RTM 测试项目 .net 4.5.2 Asp.net 核心项目 .net 4.5.2

回购步骤:

    创建一个面向 .net 4.5.2 的 asp.net 核心站点

    在解决方案中添加单元测试项目或类库并引用asp.net项目

    创建一个针对 asp.net 项目中的类的 xunit Fact 测试

    使用 resharper 测试运行器运行单元测试

错误:

System.BadImageFormatException 无法加载文件或程序集“AFAEMS,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。 在 AFAEMS.Tests.Class1.return_errors_if_missing_fields()

注意事项:

我做了很多搜索,找不到任何与此类似的问题。我可以使用不针对 asp.net 核心类文件的简单断言运行单元测试。我无法让 VS 测试运行程序找到我的 xunit 测试(也许 b/c resharper 测试运行程序已启用?)。

这些是我发现的,但没有说明如何使用 MSBuild for VS 2017 修复新的 xproj 和 app.config。 https://blogs.msdn.microsoft.com/visualstudioalm/2016/05/30/announcing-mstest-framework-support-for-net-core-rc2-asp-net-core-rc2/

Testing Asp.Net Core on full .NET framework

https://github.com/dotnet/sdk/issues/926

【问题讨论】:

【参考方案1】:

在 Visual Studio 中,将目标从“X86”更改为“Any CPU”。

此外,如果您尝试在 64 位服务器/机器上运行的 IIS 上托管具有 32 位程序集引用的应用程序,您将收到此错误。要修复此错误,请在 IIS 中托管应用程序的应用程序池的高级设置中将“启用 32 位应用程序”标志设置为 true。

【讨论】:

【参考方案2】:

我能够通过在我的 Resharper 单元测试选项中使用以下设置来解决此问题。

【讨论】:

这里相同 - 但我也从测试 -> 测试设置 -> 默认处理器架构更改为 x64。

以上是关于在 VS 2017 中针对完整的 .net 框架 asp.net 核心项目运行 XUnit 2.2.0 单元测试时出现 System.BadImageFormatException的主要内容,如果未能解决你的问题,请参考以下文章

为啥最新版的VS2017没有net framework 4.6.2,且我无法安装

目标框架下拉列表为空

VS 2017,让您调试 ASP.NET C# 项目的发布版本

学习NetCore应用框架——01-使用vs2017创建Net Core MVC的Web 应用

VS 2017 中的 MySQL 和 MVC 实体框架不工作

vs2017创建支持多框架(net4.6.1;net4.6.2;netstandard2.0;netcoreapp2.0)版本