Programing

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

lottogame 2020. 10. 9. 08:42
반응형

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


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

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로 업그레이드"제목을 참조하십시오 .


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


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에서 명령 줄 또는 너겟 관리자를 통해 디자인 타임 도구를 설치합니다.

dotnet add package Microsoft.EntityFrameworkCore.Design

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

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

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

이는 .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프로젝트 루트 폴더 (프로젝트 파일이 포함 된 폴더) 내에서 명령 을 실행해야 합니다. 그렇지 않으면 작동하지 않습니다.

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


문제에 대한 정확한 해결책찾았다 고 생각합니다. 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. I got error Error when running dotnet ef. enter image description here

  2. I corrected the error by moving to the root folder with the command cd .\School1

Hope it helps my fellow Dot Net Developers.

enter image description here


I had to add Microsoft.EntityFrameworkCore.Tools.DotNet to work. The tools section of your project.json file will look like this:

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

If you met this problem and run the asp.net core with CLI tool, you may solve it by adding <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> into xx.csproj file, and dotnet restore . Then you can use dotnet ef command.


Instead of opening a separate console window in VS Package Manager Console type and run the following commands:

Add migration

Add-Migration <migration name>

Remove last migration

Remove-Migration

Before a migration has been applied (or, to apply migration):

Update-Database

When migration has been applied:

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

HTH

EDIT: You may also need the following class in your MVC core project:

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);
    }
}

I was using a separate class library project. After trying and failing all of above in package manager console. I used command prompt, and it worked! Weird. However, credit goes to this article. And if you are using separate class library project, This is your solution.


Under visual studio 2017 i needed to run these commands from package manager console

install-package Microsoft.EntityFrameworkCore.SqlServer.Design

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

In tools section add below code,

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

This format of code solved my error.


By default when adding a NuGet Pkg it will be added as a PackageReference, this is wrong, so edit it manually

1- Edit .csproj file

2- change from "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>

참고URL : https://stackoverflow.com/questions/37276882/no-executable-found-matching-command-dotnet-ef

반응형