无法获取 DbContext 的反射类型

26

当我在 ASP Core 2.0 VS 2017 中脚手架控制器时,我遇到了以下问题:

无法获取 DbContext 的反射类型:

BE.Data.ApplicationDbContext at Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.b__6_0() at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args) at Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.Execute(String[] args) at Microsoft.VisualStudio.Web.CodeGeneration.CodeGenCommand.Execute(String[] args)

这突然发生了,而运行相同代码的同事却没有遇到这个问题,我尝试过清洗构建、删除每个项目中的 bin 和 obj 文件夹、删除数据库,但似乎仍找不到解决方法,希望得到任何帮助。

模型:

public class SettingType : BaseModel
{
    public int SettingTypeId { get; set; }
    public string SettingTypeDescription { get; set; }
    public string SystemCode { get; set; }
}

1
你的项目中使用了C#7的新特性吗? - Salah Akbari
你升级了VS到v15.3或更高版本了吗? - Ivan Stoev
@S.Akbari 是的。我正在使用7.1版本,使用了public static async Task Main(string[] args)特性。 - David B
@DavidBeaumont 测试一下,看看没有这个新功能是否能正常工作。 - Salah Akbari
@S.Akbari,我将项目语言版本更改为C#6.0,并重构了一些7/7.1功能,它就可以工作了。奇怪!谢谢,可能是一个bug?我可以将您的答案标记为已接受。 - David B
显示剩余5条评论
8个回答

51

我也曾经遇到过这个问题,当时我在使用新的C#7特性(expression bodied members和Throw expressions)时也出现了这个错误。但是,当我用C#6中等效的代码替换它后,就再也没有出现这个错误了。尝试在没有任何C#7新特性的情况下测试您的项目,可能会正常工作。我不确定原因是什么,但我认为脚手架依赖的Roslyn包还不支持C#7的新功能。

作为一个解决方法让脚手架与C#7一起工作,我认为您可以执行以下操作:

  1. 安装(或更新)NuGet包Microsoft.CodeAnalysis.CSharp.Workspaces版本2.0.0或更高版本
  2. 然后重试脚手架

6
同样的问题在VS2019上出现。对我有用。 - Gonzalo Lorieto
2
同样的问题在VS2019 16.6.0预览版2.1中出现。对我有用。 - Matthew Dixon
2
我在 VS 16.8.2 下的一个 .Net 5.0 项目中遇到了同样的问题,但这个方法解决了它。删掉表达式体成员并没有奏效,我不得不安装 CodeAnalysis.CSharp.Workspaces(版本为 3.8)。我应该尝试恢复表达式体成员来看看是否仍然有效。 - Steve Hiner
1
对我很有帮助,安装了最新的Microsoft.CodeAnalysis.CSharp.Workspaces nuget。 - Sibusiso Mashita
1
无法在VS2022 .Net 6.0中工作 - 尝试安装此软件包时,我与Microsoft.Web.CodeGeneration.Design软件包发生版本冲突。当我安装旧版本的Microsoft.CodeAnalysis.CSharp.Workspaces时,它没有冲突。但是,在运行脚手架程序时,它会删除Microsoft.Web.CodeGeneration.Design软件包并显示错误:将Microsoft.Web.CodeGeneration.Design软件包添加到项目中。谢谢微软,你的版本管理真是太好了。 - Swedo
显示剩余2条评论

2

我正在使用Visual Studio 2019和.Net Core 3.1。

我刚刚意识到在我的代码中某处使用了unsafe { }块。我暂时注释了不安全的代码,现在可以重新生成框架。


1
当我使用Scaffold-DbContext命令生成EF模型时,出现了这个错误,并且带有警告。然后,我首先纠正了Scaffold-DbContext的警告,然后脚手架剃刀项目就可以正常工作了。

1
我遇到了一个问题。我的数据库连接字符串包含特定语言的符号(拉脱维亚语),我花了两个小时都无法解决。我通过将项目文件夹和数据库放在仅包含ASCII符号的目录中来解决这个问题。
也许对某些人有用。

遇到了同样的问题。将项目名称重命名为不包含“ä”的名称。按照此指南进行重命名:如何重命名ASP.NET Core项目 - Jesper

1

在尝试进行scaffold-dbContext时出现了歧义。 我尝试再次进行脚手架操作,但是dbcontext上出现了错误。这是一个术语的多义性使用。 通过解决错误列表中发现的歧义,解决了问题。


1
这件事情发生在我身上,只需要在脚手架之后构建项目即可。(是的,这是一件基本的事情,但我忘记了哈哈)

这是唯一对我有效的解决方案(核心 .net6)。我甚至关闭了解决方案 -> 清理它 --> 重建它,然后它就奏效了! - Fandango68

1

错误的另一个原因是代码文件中存在异常且不可见的字符。控制器脚手架中的一个错误报告了一个没有明显错误的行号,但报告了CS1056意外字符。

我使用正则表达式搜索在这里找到了该字符。它是下面屏幕截图中的黄色方块。删除它后,控制器的脚手架完成而没有错误。

Visual Studio 2022 Community,版本17.4.4

enter image description here


哇塞!这里也是一样的情况,从微软官方学习页面中复制粘贴一个简单的示例。谢谢! - Francesco B.

0
请确保您没有安装任何已弃用的软件包,因为这是导致我遇到这个问题的原因。我之前安装了Microsoft.AspNetCore.Identity,卸载它后我就可以重新生成代码了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接