为 dotnet core asp.net 运行 CRUD 脚手架时出错

Posted

技术标签:

【中文标题】为 dotnet core asp.net 运行 CRUD 脚手架时出错【英文标题】:Error when running CRUD scaffolding for dotnet core asp.net 【发布时间】:2017-03-13 03:41:43 【问题描述】:

所以我正在尝试 .net core 并启动了一个新的 asp.net core 应用程序。我创建了一个 .net 核心类库,并包含了对实体框架核心的引用。我已经创建了一个上下文,我正在尝试在我的 asp.net 核心项目中使用这个上下文搭建脚手架。当我尝试搭建脚手架时,我一直遇到这个错误:

出于搜索目的,这是错误消息:

运行所选代码生成器时出错:

'创建/修改 DbContext 时出错,成功编译新程序集后没有返回类型。'

我过去曾多次将实体框架用于其他 asp.net 网络项目,并且在尝试将 dbContext 抽象出应用程序项目之外时,我总是遇到问题。但是,这一次我无法找到解决方法。

有人看到这个错误吗?我可以提供有关我的 project.json 文件的更多详细信息,但我没有在这篇文章中放置一个大的复制粘贴,我想我会先看看是否有人遇到过这个问题。

目前在我的网络项目上运行:


  "dependencies": 
    "Microsoft.NETCore.App": 
      "version": "1.0.1",
      "type": "platform"
    ,
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Razor.Tools": 
      "version": "1.0.0-preview2-final",
      "type": "build"
    ,
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": 
      "version": "1.0.1",
      "type": "build"
    ,
    "Microsoft.EntityFrameworkCore.Tools": 
      "version": "1.0.0-preview2-final",
      "type": "build"
    ,
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": 
      "version": "1.0.0-preview2-final",
      "type": "build"
    ,
        "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": 
            "version": "1.0.0-preview2-final",
            "type": "build"
        ,
        "DBCONTEXTPROJECT: "1.0.0-*"
  ,

  "tools": 
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": 
      "version": "1.0.0-preview2-final",
      "imports": [
        "portable-net45+win8"
      ]
    
  ,

  "frameworks": 
    "netcoreapp1.0": 
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    
  ,

  "buildOptions": 
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  ,

  "runtimeOptions": 
    "configProperties": 
      "System.GC.Server": true
    
  ,

  "publishOptions": 
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  ,

  "scripts": 
    "prepublish": [ "bower install", "dotnet bundle" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  

作为注释,我尝试将我的 dbContext 项目配置为 .netcore 应用程序,以尝试使迁移也能正常工作。无论哪种方式,我都会遇到相同的错误。我目前已将这些更改恢复回来,现在将 dbContext 项目设置为 .net 标准。

这是我的 dbContext 项目设置:


    "version": "1.0.0-*",

    "dependencies": 
        "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
        "NETStandard.Library": "1.6.0"
    ,

    "tools": 
        "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
    ,
    "frameworks": 
        "netstandard1.6": 
    

我想我还应该声明我可以完美地运行 DbContext。我已经在数据库上运行了迁移,并且可以实际访问数据。

【问题讨论】:

你必须显示project.json文件? 更新为包含两个 project.json 文件。 我在 Web 应用程序 project.json 中没有看到对您的类库的引用。你删除了吗? 这个错误在刚刚发布的Visual Studio 2017中依然出现。 【参考方案1】:

我遇到了同样的问题。正如您所发现的,当您将数据模型和 DbContext 放在与 Web 应用程序不同的项目(类库)中时,就会出现问题。我相信这是当前 ASP.NET Core 中的一个错误。我不知道它是否会得到修复,但我找到了一个合理的解决方法。

当您尝试在 Visual Studio 中添加新的基架项时,您会看到“添加控制器”对话框。这里的关键是不要从你的类库中选择 DbContext 作为数据上下文类。相反,单击“加号”按钮在 Web 应用程序项目中创建(临时)新数据上下文(见下图)。不管你给它起什么名字,我都会称它为 TempDbContext。脚手架将成功完成。如果你想搭建多个模型类,现在就去做吧;它将继续使用相同的 TempDbContext。

完成脚手架后,从 Web 应用程序中删除 TempDbContext 并替换为类库中正确的 DbContext 引用。查找以下要修复的项目:

在新的脚手架控制器中,修复 DbContext 类型名称出现的任何位置 删除Data文件夹中的TempDbContext文件 从 appsettings.json 中删除 TempDbContext 连接字符串 从 Startup.cs 中的 ConfigureServices 方法中删除 AddDbContext 行

【讨论】:

【参考方案2】:

您可以右键单击控制器文件夹=> 添加新项目 => Webapi 控制器/等。

对于具有读/写操作的控制器,我的问题在这里解决了

【讨论】:

以上是关于为 dotnet core asp.net 运行 CRUD 脚手架时出错的主要内容,如果未能解决你的问题,请参考以下文章

.NET跨平台之旅:探秘 dotnet run 如何运行 .NET Core 应用程序

dotnet 替换 ASP.NET Core 的底层通讯为命名管道的 IPC 库

ASP.NET Core 中的 dotnet-trace 不显示控制器的任何方法

dotnet watch+vs code提升asp.net core开发效率

如何使用 Visual Studio ASP.NET Core 监视文件更改“dotnet watch”

ASP.NET Core--.net core 3.1 部署到 IIS