Không tìm thấy tệp thực thi nào phù hợp với lệnh “dotnet-ef”


82

Tôi đang làm một mẫu dự án bằng cách sử dụng ASP.Net Core RC2 với Microsoft.EntityFramework.Corevà SQLite.

Tôi đã làm theo hướng dẫn này: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/

Nhưng, khi tôi chạy lệnh này:

dotnet ef migrations add FirstMigration

Tôi gặp lỗi này:

No executable found matching command "dotnet-ef"

Đây là project.jsoncấu hình của tôi :

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0-rc2-3002702",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Sqlite": "1.0.0-rc2-final"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    }
  },

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

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "runtimeOptions": {
    "gcServer": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

Thông báo này cho biết project.json của bạn sẽ trông như thế nào trong RC2 nếu bạn đang sử dụng các công cụ: github.com/aspnet/Anosystemments/issues/172
Pawel

Câu trả lời:


60

Entity Framework Core 1.0

Bạn chỉ cần cập nhật toolsphần của tệp project.json của mình để bao gồm phần này:

"Microsoft.EntityFrameworkCore.Tools": {
  "version": "1.0.0-preview1-final",
  "imports": [
    "portable-net45+win8+dnxcore50",
    "portable-net45+win8"
  ]
}

Điều này sẽ làm cho các dotnet eflệnh có sẵn.

Quan trọng

Tôi cũng nên lưu ý ở đây rằng các dotnet eflệnh sẽ chỉ khả dụng khi chạy chúng từ cùng một thư mục chứa tệp project.json.

Entity Framework Core 1.1
Nếu bạn lại gặp sự cố này sau khi nâng cấp lên Entity Framework Core 1.1, hãy đảm bảo thay thế phần Microsoft.EntityFrameworkCore.Toolsphụ thuộc bằng Microsoft.EntityFrameworkCore.Tools.DotNetphiên bản 1.1.0-preview4. Không cần phải giữ lại importsphần. Để biết thêm thông tin về điều này, hãy xem tiêu đề "Nâng cấp lên 1.1" trong bài đăng blog thông báo phát hành Entity Framework Core 1.1 .


Cảm ơn bạn rất nhiều: D
Redplane

22
Không có trong thư mục với project.jsonlà vấn đề của tôi, cảm ơn!
kitsu.eb

6
Nó không làm việc cho tôi. Tôi tiếp tục nhận được cùng một lỗi.
Nikola Schou

1
@NikolaSchou Bạn cũng phải mở lại cmd.
Tyler

1
@Adrian, cảm ơn bạn quá. Sau một thời gian dài, tôi quay lại .net core. Tôi đã đối mặt với vấn đề cũ như lần tôi hỏi câu hỏi này. Thật hài hước
Redplane

56

Khung thực thể Core 1.1

Thêm vào điều này nếu bạn đang sử dụng VS2017 với các dự án .csproj mới mà không có tệp project.json

bạn cần chỉnh sửa tệp .csproj (nhấp chuột phải vào tệp đó trong trình khám phá giải pháp và nhấp vào chỉnh sửa bất cứ điều gì.csproj) và sau đó dán tệp này vào

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet">
      <Version>1.0.0-*</Version>
    </DotNetCliToolReference>
  </ItemGroup>

lịch sự của: https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967


nó hoạt động nhưng, cần phải biết phiên bản chính xác. Vì là người mới nên tôi cũng rất khó tìm ra phiên bản chính xác. Vì vậy, bất kỳ ai theo dõi câu trả lời đều biết phiên bản Microsoft.EntityFrameworkCore.Tools.DotNet của bạn và đặt thẻ phiên bản vào. tức là <Version> 2.0.3 </Version>
Saleh Enam Shohag

Điều này thực sự tiết kiệm ngày của tôi. Cám ơn! Tôi đã cập nhật VS2017và nó tự động cập nhật dotnet core CLIlên 2.0phiên bản không tương thích với dotnet core 1.0. Nhưng có vẻ như nó là thời gian mà tôi nên cập nhật dự án của tôi .net core 1.0để 2.0.
Boooooooooms

40

Dành riêng cho VS2017 15.3 trở lên và ASP.NET CORE 2.0 trở lên ...

Cài đặt nuget cho nhà cung cấp db thông qua dòng lệnh hoặc trình quản lý gói nuget.

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Thêm phần sau vào .csproj

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

Cài đặt các công cụ thời gian thiết kế thông qua dòng lệnh hoặc trình quản lý nuget trong VS2017.

dotnet add package Microsoft.EntityFrameworkCore.Design

Điều này cho phép dotnet ef * tại dòng lệnh trong thư mục dự án.

Bật các lệnh dotnet ef * tại dòng lệnh trong thư mục dự án,

dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold 

2
Great câu trả lời, tôi đang tìm kiếm tất cả mọi thứ và phần trên thêm vào 'ItemGroup' là những gì đã thực sự ngăn chặn đối với tôi trên NET Core 2 Web API sử dụng EF Core 2.
djangojazz

Ở đây cũng vậy. Các DotNetCliToolReference với Tools.DotNet là chìa khóa trong trường hợp của tôi
blfuentes

Đây cố định vấn đề của tôi, Cùng một vấn đề với NET Core 2 Web API sử dụng EF Core 2
Deluq

32

Đây là sự cố thường gặp khi chuyển từ .NET Core 1.0 sang .NET Core 1.1+ hoặc 2.x.

Để khắc phục điều đó, bạn cần:

  • Lấy Microsoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.Tools.DotNet thư viện gói sử dụng NuGet.
  • Thêm thủ công tham chiếu đến gói này trong tệp cấu hình dự án project.json(đối với .NET Core 1.0) hoặc <projectName>.csproj(đối với .NET Core 1.1+ & 2.x) của bạn.

Cụ thể hơn, đối với các dự án .NET Core 1.0, hãy thêm điều này:

"tools": {
   "Microsoft.EntityFrameworkCore.Tools": "1.0.0"
   "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0"
 }

Đối với các dự án .NET Core 1.1+ và .NET Core 2.x, hãy thêm cái này:

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

Nếu bạn đã có toolskhóa json hoặc một <ItemGroup>phần tử có một hoặc nhiều DotNetCliToolReferencephần tử hiện có , chỉ cần thêm các phần tử mới vào nhóm hiện có.

QUAN TRỌNG : ngoài việc thực hiện các bước trên, bạn phải khởi chạy dotnet eflệnh trong thư mục gốc của dự án (thư mục chứa tệp dự án), nếu không lệnh sẽ không hoạt động.

Để biết thêm thông tin và giải thích sâu hơn về vấn đề, bạn có thể đọc thêm trên bài đăng trên blog của tôi .


Nhờ giao phối bạn tiết kiệm trong ngày :)
marvelTracker

Làm cách nào để bạn khởi chạy lệnh dotnet ef trong thư mục gốc của dự án?
Ian Warburton

1
@IanWarburton bởi có C:\Program Files\dotnettrong biến môi trường PATH HOẶC bằng cách sử dụng đường dẫn đầy đủ, ví dụ: C:\Program Files\dotnet\dotnet.exe
Darkseal

Làm việc cho tôi trong .NET Core 2.0. Giải pháp được chấp nhận không hiệu quả với tôi. Phần QUAN TRỌNG đã làm thủ thuật cho tôi. Cảm ơn.
mpatel

18

Tôi nghĩ rằng tôi đã tìm thấy giải pháp chính xác cho vấn đề - dotnet: Không tìm thấy lệnh thực thi nào khớp lệnh "dotnet-ef" ..

Tôi đang sử dụng dot net core 2.0 trong VS 2017 so với 15.5.3

Nguyên nhân của lỗi này

Lỗi này được gây ra bởi vì các NuGetkhông thể tìm thấy các tập tin giải pháp trên địa điểm.

Giải pháp: - Di chuyển đến thư mục mà bạn có lớp 'Startup.cs'

  1. Tôi đã chuyển đến thư mục gốc bằng cách thêm lệnh dưới đây vào Bảng điều khiển Trình quản lý Gói của bạn .

    cd. \ School1

Ở đây 'School1' là thư mục gốc của tôi về dự án và nó chứa lớp 'Startup.cs' của tôi, nó sẽ khác trong trường hợp của bạn.

  1. Sau đó chạy lệnh dotnet eftrên Bảng điều khiển Trình quản lý Gói hiện sẽ chạy thành công.

Ví dụ với hình ảnh để hiểu rõ ràng

  1. Tôi gặp lỗi Lỗi khi chạy dotnet ef. nhập mô tả hình ảnh ở đây

  2. Tôi đã sửa lỗi bằng cách di chuyển đến thư mục gốc bằng lệnh cd .\School1

Hy vọng nó sẽ giúp ích cho các nhà phát triển Dot Net đồng nghiệp của tôi.

nhập mô tả hình ảnh ở đây


1
vâng, điều này đã giúp tôi khắc phục loại vấn đề tương tự mà tôi đang gặp phải.
mns

1
nó giúp tôi ở một mức độ nào đó. Đối với trường hợp của tôi để giải quyết vấn đề, tôi cũng làm theo câu trả lời của @Michael Freidgeim
Saleh Enam Shohag

12

Tôi đã phải thêm Microsoft.EntityFrameworkCore.Tools. DotNet hoạt động. Phần công cụ của tệp project.json của bạn sẽ giống như sau:

"tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
    "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final",
    "Microsoft.EntityFrameworkCore.Tools":"1.1.0-preview4-final",
    "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final"
},

Không có "Microsoft.EntityFrameworkCore.Tools.DotNet"
Elvin Mammadov

2
Có ... trong Duyệt qua Quản lý Gói NuGet GUI, cụm từ tìm kiếm .Tools.DotNet sẽ hiển thị nó. Bản phát hành trước mới nhất là 1.1.0-preview4-final.
K7Buoy

4

Nếu bạn gặp sự cố này và chạy lõi asp.net bằng công cụ CLI, bạn có thể giải quyết nó bằng cách thêm <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> vào tệp xx.csproj và dotnet restore . Sau đó, bạn có thể sử dụng lệnh dotnet ef.


Tôi thực sự gặp phải vấn đề tương tự. Tôi đang sử dụng 2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNet và cập nhật tệp proj, tải lại dự án, sau đó kiểm tra lại và nó hoạt động. Cảm ơn!
Miles

1

Thay vì mở một cửa sổ bảng điều khiển riêng biệt trong loại VS Package Manager Console và chạy các lệnh sau:

Thêm di chuyển

Add-Migration <migration name>

Xóa lần di chuyển cuối cùng

Remove-Migration

Trước khi quá trình di chuyển được áp dụng (hoặc để áp dụng quá trình di chuyển):

Update-Database

Khi quá trình di chuyển đã được áp dụng:

Update-Database -Migration <previous migration> -Context <db context name>

HTH

CHỈNH SỬA : Bạn cũng có thể cần lớp sau trong dự án cốt lõi MVC của mình:

public class DbContextFactory : IDesignTimeDbContextFactory<NotesContext>
{
    public YourDbContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<YourDbContext>();
        builder.UseSqlServer("DefaultConnection", optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(YourDbContext).GetTypeInfo().Assembly.GetName().Name));
        return new YourDbContext(builder.Options);
    }
}

1

Trong trường hợp của tôi dotnet eflà không có sẵn và không hiển thị trong danh sách khi dotnet -hchạy.

Tôi đã cài đặt dotnet-ef toàn cầu bằng lệnh sau và bây giờ tôi có thể sử dụng nó. Nhưng vẫn không có trong danh sách.

dotnet tool install -g dotnet-ef 

0

Tôi đã sử dụng một dự án thư viện lớp riêng biệt. Sau khi thử và không thành công tất cả những điều trên trong bảng điều khiển trình quản lý gói. Tôi đã sử dụng dấu nhắc lệnh và nó đã hoạt động! Kỳ dị. Tuy nhiên, tín dụng đi đến bài viết này . Và nếu bạn đang sử dụng dự án thư viện lớp riêng biệt, Đây là giải pháp của bạn.


0

Trong visual studio 2017, tôi cần chạy các lệnh này từ bảng điều khiển trình quản lý gói

install-package Microsoft.EntityFrameworkCore.SqlServer.Design

Scaffold-DbContext "Server=.\sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp"

0

Trong phần công cụ, hãy thêm mã bên dưới,

 "tools": {

    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview2-final",

    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {

      "version": "1.0.0-preview2-final",
      "imports": "portable-net45+win8+dnxcore50"
    }
  }

Định dạng mã này đã giải quyết được lỗi của tôi.


0

Theo mặc định khi thêm NuGet Pkg nó sẽ được thêm dưới dạng PackageReference, điều này là sai, vì vậy hãy chỉnh sửa thủ công

1- Chỉnh sửa tệp .csproj

2- thay đổi từ "PackageReference":

<ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
to:
<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.