EF Core 错误 - 未找到项目。更改当前工作目录或使用 --project 选项

Posted

技术标签:

【中文标题】EF Core 错误 - 未找到项目。更改当前工作目录或使用 --project 选项【英文标题】:EF Core Error - No project was found. Change the current working directory or use the --project option 【发布时间】:2017-08-16 22:24:21 【问题描述】:

我正在使用 Visual Studio 2015 和 dotnet core 并尝试使用 Sqlite 开发 EF Core Code First 项目 和本文档/教程,它也使用 Sqlite => NET Core - New Database

当我尝试通过发出以下命令从命令行添加初始迁移(我被 CD 编辑到我的数据模型项目所在的文件夹中)

dotnet ef migrations add InitialMigration

...我收到以下错误。

没有找到项目。更改当前工作目录或使用 --project 选项。

我什至尝试过像这样使用--project 选项。

> dotnet --project "C:\Shiva\EF\EFCFSqlite.Data.xproj"  ef migrations add InitialMigration

但这会产生以下错误。

Unknown option: --project
.NET Command Line Tools (1.0.0-preview2-003131)
Usage: dotnet [host-options] [command] [arguments] [common-options]

我注意到文档使用的是.csproj 文件,而我的项目显示的是xproj 文件。文档还提到了一些关于不再使用project.json 的内容:(

这是我的project.json 文件。


  "version": "1.0.0-*",

  "dependencies": 
    "Microsoft.EntityFrameworkCore.Sqlite": "1.1.1",
    "Microsoft.EntityFrameworkCore.Sqlite.Design": "1.1.1",
    "NETStandard.Library": "1.6.1"
  ,
  "tools": 
    "Microsoft.EntityFrameworkCore.Tools.DotNet":"1.0.0"
  ,
  "frameworks": 
    "netstandard1.6": 
      "imports": "dnxcore50"
    
  

发生了什么变化?我们是否别无选择,只能安装 Visual Studio 2017 并从头开始? project.json 和其他所有东西都不再受尊重了吗?

如果是这样的话,对我来说似乎是一个巨大的变化:(

【问题讨论】:

我不知道你的问题,但我会指出 --project 是在错误的位置。 dotnet efdotnet 不同,这是需要 --proj 的命令。此外,如果您使用的是最新工具,则需要从 project.json 迁移到 .csproj 格式。如果您安装 Visual Studio 2017,这将破坏 VS 2015 提供的预览工具,因此只有在项目中的每个人都准备好切换时才安装它。 谢谢埃里克。是否可以从 project.json 迁移到 .csproj 而无需升级到 Visual Studio 2017?还是我必须绝对同时进行项目升级和 VS 升级才能使其正常工作? 除非您打算使用支持它的 IDE,否则我不会迁移到 .csproj。在下面查看 Gys 的答案。仍应为 project.json 配置设置预览工具。一般来说,您希望保留预览版以支持 project.json 的工具,但您应该能够使用最新版本的其他库。 "我们是否别无选择,只能安装 Visual Studio 2017 并从头开始??"可悲的是,最终,yes. 【参考方案1】:

有时您需要更改控制台/终端中的当前目录,例如:

PM> cd E:\Projects\CrossTest\
PM> dotnet ef migrations add InitialMigration

和 对齐你的包版本。 使用 preview1 包或 preview2。 不支持混合使用。

【讨论】:

对我来说就是这种情况。我不得不将整个路径用双引号括起来。 PM> cd "E:\Projects\CrossTest\" 它对我来说就像魅力一样。 这个回复cd MyProjectSubfolder 可能是大多数点击此页面的人的“正确”答案。它对我有用:) 尝试了不同的方式,但没有工作,cd "C:\pp\EmployeeApp" 和 cd C:\pp\EmployeeApp 然后执行命令 - dotnet ef migrations add InitialCreate。同样的问题来了 @AkshayMishra 非常感谢,这是我的问题,我不得不使用 cd 指向正确的项目目录。救世主! 这是侵入性最小的答案,并且使用 .Net Core 5.0 对我也有效。我只需要指向正确的目录而不更改任何配置。【参考方案2】:

这只是意味着

您不在当前项目目录中

我在使用 this 构建现有 mysql 数据库时遇到了同样的问题。

我正在执行的命令:

dotnet ef dbcontext scaffold "Server=123.1.1.1;Uid=abc;Pwd=abc;Database=myDB;Connection Timeout=20;Persist Security Info=False;Port=3306;Allow User Variables=True;Connect Timeout=120;" MySql.Data.EntityFrameworkCore -o Models

导致同样的错误,然后我检查了包管理器控制台中的当前工作目录,发现不正确。

就我而言

意味着切换目录后我不在当前项目目录中

cd SSGCApp

现在您在项目目录中,可以运行命令了。

【讨论】:

谢谢。那是我的问题。运行“dir”命令后,它最初看起来像是正确的文件夹,但是当我查看 Windows 资源管理器时,我发现我需要再深入一个文件夹才能找到 .csproj 文件的位置。转到该目录,然后运行 ​​ef migrations add 命令。 很高兴为您提供帮助 遇到了同样的问题!谢了哥们。有什么办法可以查看当前目录而不是无意义的“PM>”? @Florent 很高兴为您提供帮助,您检查过这个***.com/questions/607670/…了吗? 就这么简单:)。谢谢【参考方案3】:

代替:

"tools": 
    "Microsoft.EntityFrameworkCore.Tools.DotNet":"1.0.0"
  ,

尝试:

"tools": 
      "Microsoft.EntityFrameworkCore.Tools.DotNet": 
      "version": "1.0.0-preview3-final"
  ,

【讨论】:

谢谢,这就是为什么我强烈不建议任何人在 v3.x.x 之前不要使用 ASP.NET Core,这是依赖地狱和版本地狱。【参考方案4】:
    添加nuget包Microsoft.EntityFrameworkCore.Tools 添加nuget包Microsoft.EntityFrameworkCore.Design 右键单击您的项目文件,选择Edit,然后将以下内容添加到包含PackageReference 节点的ItemGroup

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />

(您可以在 Nuget 包管理器中找到最新版本)

    打开包管理控制台:工具->Nuget 包管理器->包管理器控制台 输入cd path where your csproj file resides(这很重要) 现在输入dotnet ef migrations add InitialMigration

【讨论】:

这帮助我更进一步。我现在明白了:无法创建“***Context”类型的对象。将 'IDesignTimeDbContextFactory' 的实现添加到项目中,或参阅go.microsoft.com/fwlink/?linkid=85172 8 了解设计时支持的其他模式。我去看看那个链接 第五步最重要,我做到了【参考方案5】:

刚刚遇到类似的问题。通过降级到 1.0.0-preview3-final 修复

"tools": 
     "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final",    

并将 --project 参数更改为 --startup-project

dotnet ef --startup-project <PATH_TO_PROJECT_DIRECTORY> migrations add <MIGRATION_NAME>

在 global.json 中,我还将版本降级为

 "sdk": 
     "version": "1.0.0-preview2-003131"
 

这可能是迁移到 csproj 之前的临时解决方法。

【讨论】:

【参考方案6】:

显然,这听起来可能很有趣,但就我而言,当我遇到此错误时,我的应用程序的服务器端正在运行。基本上,确保您的应用在尝试创建迁移时根本没有运行。正如我所说,对我来说,这就是治疗方法。对于那些无法通过标记答案修复它的人来说可能是一些建议。

【讨论】:

【参考方案7】:

dotnet-ef 命令已移动。

您需要添加对 Microsoft.EntityFrameworkCore.Tools.DotNet AND Microsoft.EntityFrameworkCore.Design 到您的依赖项 project.json,然后将 Microsoft.EntityFrameworkCore.Tools.DotNet 添加到工具部分,您应该可以开始了。

引用自:http://errummwelluhh.blogspot.com

【讨论】:

【参考方案8】:

只需使用此命令即可。

Add-Migration InitialCreated -c bodoContext

不用担心。

【讨论】:

【参考方案9】:

添加引用 Microsoft.EntityFrameworkCore.Design 和 Microsoft.EntityFrameworkCore.Tools

然后运行:

dotnet-ef 迁移添加 InitialCreate --project ProjectName

dotnet ef migrations add InitialCreate --project ProjectName

【讨论】:

请不要repeat answers。它只会增加噪音。

以上是关于EF Core 错误 - 未找到项目。更改当前工作目录或使用 --project 选项的主要内容,如果未能解决你的问题,请参考以下文章

EF 5启用 - 迁移:在程序集中未找到上下文类型

EF Core 设置环境无法按预期工作

在内存中使用 SQLite 运行 EF Core - 未配置数据库提供程序

EF Core 多个 HTTP 请求引发错误

EF Core Add-Migration 错误属性已存在

EF 尝试插入未更改的实体