【问题标题】:EF Core Error - No project was found. Change the current working directory or use the --project optionEF Core 错误 - 未找到项目。更改当前工作目录或使用 --project 选项
【发布时间】: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.

标签: ef-code-first .net-core entity-framework-core entity-framework-migrations dotnet-cli


【解决方案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 很高兴为您提供帮助,您检查过这个stackoverflow.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】:
  1. 添加nuget包Microsoft.EntityFrameworkCore.Tools
  2. 添加nuget包Microsoft.EntityFrameworkCore.Design
  3. 右键单击您的项目文件,选择Edit,然后将以下内容添加到包含PackageReference 节点的ItemGroup

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

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

  1. 打开包管理控制台:工具->Nuget 包管理器->包管理器控制台
  2. 输入cd {path where your csproj file resides}(这很重要)
  3. 现在输入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
          

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-30
          • 1970-01-01
          相关资源
          最近更新 更多