"dotnet-ef"명령과 일치하는 실행 파일을 찾을 수 없습니다.


82

ASP.Net Core RC2와 Microsoft.EntityFramework.CoreSQLite를 사용하여 프로젝트 샘플을 작성 하고 있습니다.

이 튜토리얼을 따랐습니다 : https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/

하지만이 명령을 실행하면

dotnet ef migrations add FirstMigration

이 오류가 발생했습니다.

No executable found matching command "dotnet-ef"

project.json구성 은 다음과 같습니다 .

{
  "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%" ]
  }
}

이 발표는 도구를 사용하는 경우 RC2에서 project.json이 어떻게 보이는지 보여줍니다. github.com/aspnet/Announcements/issues/172
Pawel

답변:


60

Entity Framework Core 1.0

tools다음을 포함하도록 project.json 파일 의 섹션 을 업데이트하기 만하면 됩니다.

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

이렇게하면 dotnet ef명령을 사용할 수 있습니다.

중대한

여기서도 dotnet ef명령은 project.json 파일이 포함 된 동일한 디렉토리에서 명령을 실행할 때만 사용할 수 있다는 점에 유의해야 합니다.

Entity Framework Core 1.1 Entity Framework Core 1.1로
업그레이드 한 후이 문제가 다시 발생하면 Microsoft.EntityFrameworkCore.Tools종속성을 Microsoft.EntityFrameworkCore.Tools.DotNet버전 1.1.0-preview4. imports섹션 을 유지할 필요도 없습니다 . 이에 대한 자세한 내용은 Entity Framework Core 1.1 릴리스 발표 블로그 게시물 아래의 "1.1로 업그레이드"제목을 참조하십시오 .


정말 감사합니다 : D
Redplane

22
폴더에없는 project.json것이 내 문제였습니다. 감사합니다!
kitsu.eb

6
나를 위해 작동하지 않습니다. 같은 오류가 계속 발생합니다.
Nikola Schou

1
@NikolaSchou 또한 cmd를 다시 열어야합니다.
Tyler

1
@Adrian, 감사합니다. 오랜만에 .net 코어로 돌아 왔습니다. 이 질문을 할 때 나는 오래된 문제에 직면했습니다. 그래서 재미
Redplane

56

Entity Framework Core 1.1

project.json 파일없이 새 .csproj 프로젝트와 함께 VS2017을 사용하는 경우 여기에 추가

.csproj 파일을 편집해야합니다 (솔루션 탐색기에서 마우스 오른쪽 단추로 클릭하고 whatever.csproj 편집을 클릭하십시오).

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

제공 : https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967


작동하지만 올바른 버전을 알아야합니다. 내가 처음이기 때문에 올바른 버전을 찾는 것도 매우 어려웠습니다. 따라서 답변을 따르는 사람은 Microsoft.EntityFrameworkCore.Tools.DotNet 버전을 알고 버전 태그에 넣습니다. ie <Version> 2.0.3 </ Version>
Saleh Enam Shohag

이것은 정말로 내 하루를 절약합니다. 고마워! .NET VS2017과 호환되지 않는 버전 으로 업데이트 dotnet core CLI했고 자동으로 업데이트되었습니다 . 그러나 내 프로젝트 를 . 2.0dotnet core 1.0.net core 1.02.0
Boooooooooms

40

VS2017 15.3 이상 및 ASP.NET CORE 2.0 이상에만 해당됩니다.

명령 줄 또는 nuget 패키지 관리자를 통해 db 공급자 용 nuget을 설치합니다.

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

.csproj에 다음 섹션 추가

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

VS2017에서 명령 줄 또는 Nuget 관리자를 통해 디자인 타임 도구를 설치합니다.

dotnet add package Microsoft.EntityFrameworkCore.Design

이렇게하면 프로젝트 디렉터리의 명령 줄에서 dotnet ef *가 활성화됩니다.

프로젝트 디렉토리의 명령 줄에서 dotnet ef * 명령을 활성화합니다.

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

2
멋진 대답, 나는 'ItemGroup'에 추가하는 모든 및 섹션을 찾고 있었어요 정말 사용하여 .NET 코어 2 웹 API에 나를 위해 차단 된 것이었다 EF 코어 2
djangojazz

여기도 마찬가지입니다. DotNetCliToolReference Tools.DotNet와 내 경우에는 핵심이었다
blfuentes

이 문제가 해결되었습니다. EF Core 2를 사용하는 NET Core 2 Web API와 동일한 문제
Deluq

32

이는 .NET Core 1.0에서 .NET Core 1.1+ 또는 2.x로 전환 할 때 발생하는 일반적인 문제입니다.

이를 수정하려면 다음을 수행해야합니다.

  • 가져 오기 Microsoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.Tools.DotNet의 NuGet을 사용하여 패키지 라이브러리를.
  • project.json(.NET Core 1.0의 경우) 또는 <projectName>.csproj(.NET Core 1.1+ 및 2.x의 경우) 프로젝트 구성 파일 내에서이 패키지에 대한 참조를 수동으로 추가 합니다.

보다 구체적으로 .NET Core 1.0 프로젝트의 경우 다음을 추가합니다.

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

.NET Core 1.1 이상 및 .NET Core 2.x 프로젝트의 경우 다음을 추가합니다.

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

이미 toolsjson 키 또는 <ItemGroup>기존 DotNetCliToolReference요소 가 하나 이상있는 요소 가있는 경우 기존 그룹에 새 키를 추가하기 만하면됩니다.

중요 : 위의 단계를 수행하는 것 외에 dotnet ef프로젝트 루트 폴더 (프로젝트 파일이 들어있는 폴더) 내에서 명령 을 실행해야 합니다. 그렇지 않으면 작동하지 않습니다.

추가 정보와 문제에 대한 광범위한 설명을 보려면 내 블로그 게시물 에서 더 많은 정보를 읽을 수 있습니다 .


덕분에 당신이 날 :) 저장 짝
marvelTracker

프로젝트 루트 폴더 내에서 dotnet ef 명령을 어떻게 시작합니까?
Ian Warburton

1
@IanWarburton C:\Program Files\dotnetPATH 환경 변수를 사용하거나 전체 경로를 사용하여, 즉 C:\Program Files\dotnet\dotnet.exe
Darkseal

.NET Core 2.0에서 나를 위해 일했습니다. 허용 된 솔루션이 저에게 효과적이지 않았습니다. 중요한 섹션이 나를 위해 트릭을했습니다. 감사.
mpatel

18

문제에 대한 정확한 해결책 을 찾았다 고 생각합니다. dotnet : "dotnet-ef"명령과 일치하는 실행 파일을 찾을 수 없습니다 ..

VS 2017 versio 15.5.3에서 dot net core 2.0을 사용하고 있습니다.

이 오류의 원인

이 오류는 Nuget 이 해당 위치 에서 솔루션 파일 을 찾을 수 없기 때문에 발생 합니다.

해결책 :- 'Startup.cs'클래스가있는 디렉토리로 이동하십시오.

  1. 패키지 관리자 콘솔 에 아래 명령 을 추가 하여 루트 로 이동했습니다 .

    cd. \ School1

여기서 'School1'은 프로젝트의 루트 디렉토리 이며 'Startup.cs'클래스가 포함되어 있으며 귀하의 경우에는 다릅니다.

  1. 그런 다음 이제 성공적으로 실행될 패키지 관리자 콘솔 에서 명령 dotnet ef을 실행합니다 .

명확한 이해를위한 그림이있는 예

  1. 실행할 때 오류 오류가 발생했습니다 dotnet ef. 여기에 이미지 설명 입력

  2. 명령으로 루트 폴더로 이동하여 오류를 수정했습니다. cd .\School1

동료 Dot Net 개발자에게 도움이되기를 바랍니다.

여기에 이미지 설명 입력


1
예, 이것은 제가 직면 한 유사한 유형의 문제를 해결하는 데 도움이되었습니다.
mns jul.

1
어느 정도 도움이됩니다. 내 경우이 문제를 해결하기 위해 나는 또한 @Michael Freidgeim의 대답에 따라
살레 Enam Shohag

12

Microsoft.EntityFrameworkCore.Tools를 추가해야했습니다. DotNet 이 작동합니다. project.json 파일의 도구 섹션은 다음과 같습니다.

"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"
},

"Microsoft.EntityFrameworkCore.Tools.DotNet"없다
엘빈 맘마 도프

2
NuGet 패키지 관리 GUI를 통해 찾아보기에 .Tools.DotNet이라는 검색어가 표시됩니다. 최신 시험판은 1.1.0-preview4-final입니다.
K7Buoy

4

이 문제를 만났고 CLI 도구로 asp.net 코어를 실행하면 <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> xx.csproj 파일 에 추가 하여 해결할 수 있습니다 dotnet restore . 그런 다음 dotnet ef 명령을 사용할 수 있습니다.


실제로 같은 문제가 발생했습니다. 2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNet을 사용하고 있고 proj 파일을 업데이트하고 프로젝트를 다시로드 한 다음 다시 테스트하고 작동했습니다. 감사!
Miles

1

VS 패키지 관리자 콘솔 유형에서 별도의 콘솔 창을 여는 대신 다음 명령을 실행합니다.

마이그레이션 추가

Add-Migration <migration name>

마지막 마이그레이션 제거

Remove-Migration

마이그레이션이 적용되기 전 (또는 마이그레이션을 적용하려면) :

Update-Database

마이그레이션이 적용된 경우 :

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

HTH

편집 : MVC 핵심 프로젝트에 다음 클래스가 필요할 수도 있습니다.

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

제 경우 dotnet ef에는 사용할 수 없었고 dotnet -h실행될 때 목록에 표시되지 않았습니다 .

다음 명령을 사용하여 전 세계적으로 dotnet-ef를 설치했으며 이제 사용할 수 있습니다. 그러나 여전히 목록에 없습니다.

dotnet tool install -g dotnet-ef 

0

별도의 클래스 라이브러리 프로젝트를 사용하고있었습니다. 패키지 관리자 콘솔에서 위의 모든 것을 시도하고 실패한 후. 명령 프롬프트를 사용했고 작동했습니다! 기묘한. 그러나 신용은 이 기사에 간다 . 그리고 별도의 클래스 라이브러리 프로젝트를 사용하는 경우 이것이 솔루션입니다.


0

Visual Studio 2017에서는 패키지 관리자 콘솔에서 이러한 명령을 실행해야했습니다.

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

도구 섹션에서 아래 코드를 추가하십시오.

 "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"
    }
  }

이 형식의 코드는 내 오류를 해결했습니다.


0

기본적으로 NuGet Pkg를 추가 할 때 PackageReference로 추가됩니다. 이것은 잘못되었으므로 수동으로 편집하십시오.

1- .csproj 파일 편집

2- "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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.