Scaffold-DbContext 在 .net core 中抛出错误“无法找到程序集”

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

我正在使用.net core和entity Framework core 1.1.0。在 Package Manager Console

中尝试以下命令时
Scaffold-DbContext "Server=MyServer\\MyInstance;Database=MyDB;user=MyUsername;password=MyDbPassword;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -t Table1,Table2

我收到此错误

找不到程序集 'D:\Work\Projects\src\MyProject\src\MyProject.Api.in\Debug et461\win7-x64\MyProject.Data.exe'.

MyProject.Data 是一个网络核心库。 MyProject.Api是.net完整框架核心api,它引用了MyProject.Data。

MyProject.Data 的project.json 文件

{
  "version": "1.0.0-*",

  "dependencies": {
    "Microsoft.EntityFrameworkCore.Design": "1.1.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final"
  },

  "frameworks": {
    "net461": {}
  }
}

有什么建议给我吗?

c# .net entity-framework-core .net-core scaffolding
3个回答
13
投票

不确定这是否是一个错误,但

scaffold-dbcontext
命令在启动项目中查找程序集。

此问题有两种解决方法

  1. 右键单击要运行此命令的项目(在您的情况下,它是 MyProject.Data),然后选择 设置为启动项目
  2. 您可以向
    scaffold-DBContext
    命令传递参数,以在运行该命令时将特定项目设置为启动项目。 这是您需要在命令末尾添加的内容...

-StartupProject MyProject.Data


7
投票

如果目标平台是x86,似乎也会出现此问题。

切换到AnyCPU即可解决问题。


0
投票

我一直在尝试搭建 FireBird 数据库。 第一个问题是 FireBird 文件是用 32 位制作的。 因此,我的项目必须以 x86 为目标。 然后我收到消息“无法加载程序集,确保它被启动项目引用”。 删除这些消息的解决方案是:

  • 如果在 embedded 模式下使用 Firebird(无需运行服务器实例),请下载 x86 Firebird 包,将
    fbembed.dll
    icudt30.dll
    icuuc30.dll
    msvcr80.dll
    与 csproj 并排复制
  • 安装x86网络SDK
  • 在系统环境变量
    上面
    添加C:\Program Files (x86)\dotnet\
    C:\Program Files\dotnet\
  • 在 Powershell x86 :
    & 'C:\Program Files (x86)\dotnet\dotnet.exe' ef dbcontext scaffold "ServerType=1;Database=PATH_TO_THE_FDB;user id=THE_USER;password=THE_PASSWORD" FirebirdSql.EntityFrameworkCore.Firebird --configuration=debug --verbose
    , ServerType=1 用于在嵌入模式下使用 Firebird

帮助我走这条路的是这个github问题Procmon然后帮助我看到dotnet进程是x64的。

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