无法获取 DbContext 的反射类型

问题描述 投票:0回答:8

在 ASP Core 2.0 VS 2017 中搭建控制器时,我得到以下信息:

无法获取 DbContext 的反射类型:

BE.Data.ApplicationDbContext 位于 Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.b__6_0() 在 Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(字符串[] 参数)在 Microsoft.VisualStudio.Web.CodeGeneration.ActionInvoker.Execute(字符串[] 参数)在 Microsoft.VisualStudio.Web.CodeGeneration.CodeGenCommand.Execute(字符串[] 参数)

这一切突然发生,运行相同代码的同事没有遇到这个问题,我尝试过干净的构建,删除每个项目中的 bin 和 obj 文件夹,删除 db,但我似乎仍然无法解决这个问题,将不胜感激任何帮助。

型号:

public class SettingType : BaseModel
{
    public int SettingTypeId { get; set; }
    public string SettingTypeDescription { get; set; }
    public string SystemCode { get; set; }
}
c# entity-framework asp.net-core asp.net-core-2.0
8个回答
51
投票

我也遇到了这个问题,当我使用新的 C#7 功能(表达式实体成员和 Throw 表达式)时,但是通过将我的代码替换为 C#6 中的等效代码,它不再给我这个错误。尝试在没有任何 C#7 新功能的情况下测试您的项目,也许它应该可以正常工作。我不确定是什么原因,但我认为脚手架所依赖的 Roslyn 包还不支持 C#7 新功能。

作为让脚手架与 C#7 一起使用的解决方法,我认为您可以通过执行以下操作:

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

2
投票

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

我刚刚意识到我的代码中的某个地方使用了

unsafe { }
块。我临时评论了不安全的代码,我可以再次搭建脚手架。


1
投票

当我通过 Scaffold-DbContext 命令生成 EF 模型时出现此错误,并且出现警告。然后首先我纠正 Scaffold-DbContext 的警告,然后脚手架剃刀项目工作正常。


1
投票

尝试使用scaffold-dbContext 时存在歧义。 我再次尝试搭建脚手架,但 dbcontext 上出现错误。这是对一个术语的模糊使用。 解决错误列表中的这种歧义。解决了问题。


1
投票

我就遇到过这种情况,只需要在脚手架之后搭建项目即可。 (是的,这是基本的事情,但我忘记了哈哈)


1
投票

我对此有疑问。我的数据库连接字符串包含特定于语言的符号(拉脱维亚语),我花了两个小时才弄清楚。我通过将项目文件夹和数据库放置在仅包含 ASCII 符号的目录中来修复此问题。

也许对某人有用。


1
投票

错误的另一个原因...代码文件中不寻常且不可见的字符。来自控制器脚手架的错误之一报告了行号,没有明显的错误,但确实报告了 CS1056 意外字符。

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

Visual Studio 2022 社区,版本 17.4.4


0
投票

还要确保您没有安装任何已弃用的软件包,因为这就是导致我出现此问题的原因。我安装了 Microsoft.AspNetCore.Identity,卸载后我可以再次搭建脚手架。

© www.soinside.com 2019 - 2024. All rights reserved.