コマンド「dotnet-ef」に一致する実行可能ファイルが見つかりません


82

ASP.Net CoreRC2を使用してプロジェクトサンプルを実行しています Microsoft.EntityFramework.CoreとSQLiteます。

私はこのチュートリアルに従いました: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-preview4importsセクションを保持する必要もありません。これに関する詳細については、Entity Framework Core1.1リリース発表のブログ投稿の下にある「1.1へのアップグレード」の見出しを参照してください。


どうもありがとうございました:D
Redplane 2016年

22
のフォルダにないことproject.jsonが私の問題でした、ありがとう!
kitsu.eb 2016年

6
それは私にはうまくいきません。同じエラーが発生し続けます。
Nikola Schou 2016

1
@NikolaSchouまた、cmdを再度開く必要があります。
タイラー

1
@エイドリアン、ありがとうございます。久しぶりに.netcoreに戻りました。私がこの質問をしたとき、私は古い問題に直面しました。とても面白い
Redplane 2017年

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のバージョンを知っており、バージョンタグを付けます。つまり、<Version> 2.0.3 </ Version>
Saleh Enam Shohag 2018

これは本当に私の日を節約します。どうも!更新するVS2017と、と互換性のないバージョンに自動的に更新されましdotnet core CLIた。しかし、プロジェクトをに更新する必要があるようです。2.0dotnet core 1.0.net core 1.02.0
boooooooooms 2018

40

VS201715.3以降およびASP.NETCORE2.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 *が有効になります。

プロジェクトディレクトリのコマンドラインでdotnetef *コマンドを有効にします。

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

2
グレート答え、私はすべてを探していたと「ItemGroup」に追加のセクションでは、実際にEFコア2を使用して、.NETのコア2のWeb APIに私のためにブロックされたものだった
djangojazz

こっちも一緒。DotNetCliToolReference Tools.DotNetでは、私の場合は、キーだった
blfuentes

これで私の問題が修正されました
。EFCore2

32

これは、.NET Core1.0から.NETCore1.1 +または2.xに切り替える際の一般的な問題です。

これを修正するには、次のことを行う必要があります。

  • NuGetを使用して、Microsoft.EntityFrameworkCore.ToolsおよびMicrosoft.EntityFrameworkCore.Tools.DotNetパッケージライブラリを取得します
  • 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 Core1.1以降および.NETCore 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>1つ以上の既存のDotNetCliToolReference要素を持つ要素が既にある場合は、既存のグループに新しい要素を追加するだけです。

重要:上記の手順を実行する以外dotnet efに、プロジェクトのルートフォルダー(プロジェクトファイルを含むフォルダー)内でコマンドを起動する必要があります。そうしないと、機能しません。

この問題の追加情報と詳細な説明については、私のブログ投稿で詳細を読むことができます。


あなたがその日を救う仲間に感謝します:)
marvelTracker 2017

プロジェクトのルートフォルダー内でdotnetefコマンドをどのように起動しますか?
Ian Warburton 2017年

1
@IanWarburton C:\Program Files\dotnetPATH環境変数を使用するか、フルパスを使用します。つまり C:\Program Files\dotnet\dotnet.exe
Darkseal 2017年

.NET Core2.0で私のために働いた。受け入れられた解決策は私にはうまくいきませんでした。重要なセクションは私のためにトリックをしました。ありがとう。
mpatel 2017年

18

問題の正確な解決策を見つけたと思います-dotnet:コマンド「dotnet-ef」に一致する実行可能ファイルが見つかりません..

VS 2017 versio15.5.3でドットネットコア2.0を使用しています

このエラーの原因

ので、このエラーが発生しNugetがある見つけることができませんソリューションファイルの場所のを。

解決策:-「Startup.cs」クラスがあるディレクトリに移動します

  1. 以下を追加してルートに移動しましたパッケージマネージャーコンソールにコマンド

    cd。\ School1

ここで「School1」は私​​の プロジェクトのルートディレクトリであり、「Startup.cs」クラスが含まれています。あなたの場合は異なります。

  1. 次にdotnet efパッケージマネージャーコンソールでコマンドを実行すると、正常に実行されます。

明確な理解のための写真付きの例

  1. 実行中にエラーエラーが発生しましたdotnet efここに画像の説明を入力してください

  2. コマンドでルートフォルダに移動してエラーを修正しました cd .\School1

それが私の仲間のドットネット開発者に役立つことを願っています。

ここに画像の説明を入力してください


1
はい、これは私が直面していた同様のタイプの問題を修正するのに役立ちました。ありがとう。
mns 2018

1
それはある程度私を助けます。問題を解決するための私の場合は、@ Michael Freidgeimの回答もフォローします
Saleh Enam Shohag 2018

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」はありません
Elvin Mammadov 2017

2
[NuGetパッケージの管理GUIの参照]に...検索用語.Tools.DotNetが表示されます。最新のプレリリースは1.1.0-preview4-finalです。
K7Buoy 2017

4

この問題に遭遇し、CLIツールでasp.netコアを実行した場合は <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> 、xx.csprojファイルに追加することで解決 できます dotnet restore 。次に、dotnetefコマンドを使用できます。


私は実際に同じ問題に遭遇しました。2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNetを使用していて、projファイルを更新し、プロジェクトをリロードしてから、再テストして動作しました。ありがとう!
マイル

1

VS Package Managerコンソールで別のコンソールウィンドウを開く代わりに、次のコマンドを入力して実行します。

移行を追加する

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.