【问题标题】:.net core 2.1 test API controller missing AspNetCore.Mvc reference.net core 2.1 测试 API 控制器缺少 AspNetCore.Mvc 参考
【发布时间】:2026-01-15 14:20:13
【问题描述】:

我正在尝试使用来自 this MS doc 的 .net core 2.1 测试 API 控制器。

我的代码看起来像

    [Fact]
    public async Task ShouldReturnOkWithHealthBackend()
    {
        var apiConsumerService = new Mock<IApiConsumerService>();
        apiConsumerService.Setup(m => m.Consume()).Returns(Task.FromResult(true));

        var controller = new HealthController(apiConsumerService.Object);

        await controller.GetHealth();
    }

在执行 await 控制器方法调用时,我遇到了“程序集未引用错误”

我可以添加

using Microsoft.AspNetCore.Mvc;

但是VS说微软命名空间中不存在AspNetCore。

Intellisense 建议我添加一些引用,但这也不起作用。

但是点击它什么也没做。我也尝试过使用 csproj 文件,看看是否可以强制加载这些程序集,但仍然没有成功。

我已经使用 XUnit 模板以及自定义 NUnit 项目进行了测试,结果相同。

我来自 API 和测试项目的 csproj 是

我需要创建什么样的项目来测试 MS 文档中的控制器?

【问题讨论】:

  • 您应该将结果分配给一个变量,然后开始。然后断言
  • var 结果 = await controller.GetHealth();
  • 我知道仍然缺少 Assert 部分,但这与此无关,因为我无法调用任何控制器方法。 @joey 您链接的文档与我在我的问题中引用的文档相同。我还没有看到对解决方案的任何特殊要求。
  • 在测试项目和 api 项目中显示你的 csproj 文件的截图差异

标签: c# xunit asp.net-core-2.1


【解决方案1】:

我注意到您没有将包含控制器的项目绑定到某个版本,而是应该使用以下元素进行绑定。

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />

你错过了版本!

魔鬼在细节中。 如果您在更新此元素后收到不同的编译错误,那么您已经解决了这个问题。

【讨论】:

  • @guillem,如果您发现上述方法可以解决您的问题,请告诉我们这个答案很有用
  • 优秀的@joey 我错误地信任 VS 来管理我的 csproj 文件