"Dotnet-ef" komutuyla eşleşen yürütülebilir dosya bulunamadı


82

ASP.Net Core RC2 Microsoft.EntityFramework.Coreve SQLite kullanarak bir proje örneği yapıyorum .

Bu öğreticiyi takip ettim: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/

Ama bu komutu çalıştırdığımda:

dotnet ef migrations add FirstMigration

Bu hatayı aldım:

No executable found matching command "dotnet-ef"

İşte project.jsonyapılandırmam:

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

Bu duyuru, araçlar kullanıyorsanız project.json'unuzun RC2'de
Pawel

Yanıtlar:


60

Entity Framework Çekirdek 1.0

Bunu toolseklemek için project.json dosyanızın bölümünü güncellemeniz yeterlidir :

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

Bu, dotnet efkomutları kullanılabilir hale getirmelidir .

Önemli

Burada ayrıca dotnet efkomutların yalnızca proje.json dosyasını içeren aynı dizinden çalıştırıldığında kullanılabileceğini de not etmeliyim .

Entity Framework Core 1.1 Entity Framework Core 1.1'e
yükselttikten sonra bu sorunu tekrar yaşıyorsanız, Microsoft.EntityFrameworkCore.Toolsbağımlılığı Microsoft.EntityFrameworkCore.Tools.DotNetsürümle değiştirdiğinizden emin olun 1.1.0-preview4. importsBölümü de saklamaya gerek yok. Bununla ilgili daha fazla bilgi için Entity Framework Core 1.1 sürüm duyurusu blog gönderisinin altındaki "1.1'e Yükseltme" başlığına bakın .


22
Klasörde olmamak project.jsonbenim sorunumdu, teşekkürler!
kitsu.eb

6
Benim için çalışmıyor. Sürekli aynı hatayı alıyorum.
Nikola Schou

@NikolaSchou: Araçlar bölümünde, yapı olmadan deneyin, yani sadece sürümü ekleyin. Örneğin: "" araçlar ": {" Microsoft.EntityFrameworkCore.Tools ":" 1.0.0-preview2-final "," Microsoft.AspNetCore.Server.IISIntegration.Tools ":" 1.0.0-preview2-final "},`
Arve Hansen

1
@NikolaSchou Ayrıca cmd'yi yeniden açmanız gerekir.
Tyler

1
@Adrian, sana da teşekkür ederim. Uzun bir süre sonra .net çekirdeğine geri dönüyorum. Bu soruyu sorduğumda eski problemle karşılaştım. Çok komik
Redplane

56

Entity Framework Core 1.1

VS2017'yi bir project.json dosyası olmadan yeni .csproj projeleriyle kullanıyorsanız buna ekleme

.csproj dosyasını düzenlemeniz gerekir (çözüm gezgininde sağ tıklayın ve her şeyi düzenle'yi tıklayın. csproj) ve ardından bunu yapıştırın

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

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


çalışıyor ancak doğru sürümü bilmeniz gerekiyor. Yeni olduğum için doğru versiyonu bulmak da benim için çok zordu. Yani yanıtı takip eden herkes Microsoft.EntityFrameworkCore.Tools.DotNet sürümünüzü bilir ve sürüm etiketini koyar. ör. <Version> 2.0.3 </Version>
Saleh Enam Shohag

Bu gerçekten günümü kurtarıyor. Teşekkür! Güncellenmiş VS2017ve otomatik olarak güncellenen dotnet core CLIiçin 2.0uyumlu değildir sürümü dotnet core 1.0. Ama görünüşe göre projemi güncellemem gereken zaman .net core 1.0geldi 2.0.
Boooooooooms

40

VS2017 15.3 veya üstü ve ASP.NET CORE 2.0 veya sonrasına özgü ...

Db sağlayıcısı için nuget'i komut satırı veya nuget paket yöneticisi aracılığıyla kurun.

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Aşağıdaki bölümü .csproj'a ekleyin

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

Tasarım zamanı araçlarını VS2017'de komut satırı veya nuget yöneticisi aracılığıyla yükleyin.

dotnet add package Microsoft.EntityFrameworkCore.Design

Bu, proje dizinindeki komut satırında dotnet ef * 'i etkinleştirir.

Proje dizinindeki komut satırında dotnet ef * komutlarını etkinleştirir,

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

2
Harika cevap, her şeye bakıyordum ve 'ItemGroup'a eklemeyle ilgili bölüm, EF Core 2 kullanarak .NET Core 2 Web API'de beni gerçekten engelleyen
şeydi

Burada aynı. DotNetCliToolReference Tools.DotNet ile benim durumumda anahtar oldu
blfuentes

Bu benim sorunumu çözdü, EF Core 2 kullanan NET Core 2 Web API ile aynı sorun
Deluq

32

Bu, .NET Core 1.0'dan .NET Core 1.1+ veya 2.x'e geçerken yaygın bir sorundur.

Bunu düzeltmek için yapmanız gerekenler:

  • NuGet kullanarak Microsoft.EntityFrameworkCore.Tools ve Microsoft.EntityFrameworkCore.Tools.DotNet paket kitaplıklarını edinin .
  • project.json(.NET Core 1.0 için) veya <projectName>.csproj(.NET Core 1.1+ ve 2.x için) proje yapılandırma dosyanız içinde bu pakete manuel olarak bir başvuru ekleyin .

Daha spesifik olarak, .NET Core 1.0 projeleri için şunu ekleyin:

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

.NET Core 1.1+ ve .NET Core 2.x projeleri için şunu ekleyin:

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

Zaten bir toolsjson anahtarınız veya bir <ItemGroup>veya daha fazla mevcut öğeye sahip bir öğeniz varsa DotNetCliToolReference, yenilerini mevcut gruba eklemeniz yeterlidir.

ÖNEMLİ : Yukarıdaki adımları uygulamak dışında, dotnet efkomutu proje kök klasöründe (proje dosyasını içeren klasör) başlatmanız gerekir , aksi takdirde çalışmaz.

Ek bilgi ve sorunun kapsamlı açıklaması için blog yazımda daha fazlasını okuyabilirsiniz .


Teşekkürler dostum, günü kurtardın :)
marvelTracker

Dotnet ef komutunu proje kök klasöründe nasıl çalıştırırsınız?
Ian Warburton

1
@IanWarburton C:\Program Files\dotnetPATH ortam değişkenine sahip olarak YA DA tam yolu kullanarak, yani C:\Program Files\dotnet\dotnet.exe
Darkseal

Benim için .NET Core 2.0'da çalıştı. Kabul edilen çözüm benim için işe yaramadı. ÖNEMLİ bölümü benim için hile yaptı. Teşekkürler.
mpatel

18

Sanırım sorun için Doğru çözümü buldum - dotnet: "dotnet-ef" komutuyla eşleşen yürütülebilir dosya bulunamadı ..

VS 2017 sürüm 15.5.3'te dot net core 2.0 kullanıyorum

Bu hatanın nedeni

Çünkü bu hataya neden olur Nuget olduğunu bulmak mümkün değil çözüm dosyasını yere.

Çözüm: - 'Startup.cs' sınıfına sahip olduğunuz dizine gidin

  1. Ben taşındı kökü aşağıda ekleyerek komutu sizin üzerinde Paket Yöneticisi Konsolundan .

    cd. \ Okul1

Burada 'School1' benim projenin kök ve benim 'Startup.cs' sınıfımı içeriyor, sizin durumunuzda farklı olacak.

  1. Sonra komutu çalıştırmak dotnet efüzerinde Paket Yöneticisi Konsolundan şimdi başarıyla çalışır.

Net Anlayış İçin Resimli Örnek

  1. Çalıştırırken hata aldım dotnet ef. görüntü açıklamasını buraya girin

  2. Komutla kök klasöre geçerek hatayı düzelttim cd .\School1

Umarım bu benim Dot Net Geliştiricilerime yardımcı olur.

görüntü açıklamasını buraya girin


1
evet, bu karşılaştığım benzer türdeki sorunları çözmeme yardımcı oldu.
mns

1
bana bir ölçüde yardımcı oluyor. Durumumun sorunu çözmesi için @Michael Freidgeim'in cevabını da takip ediyorum
Saleh Enam Shohag

12

Microsoft.EntityFrameworkCore.Tools eklemek zorunda kaldım. DotNet çalışmak. Project.json dosyanızın araçlar bölümü şu şekilde görünecektir:

"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" yok
Elvin Mammadov

2
NuGet Paketlerini Yönet GUI'ye Gözat'da .Tools.DotNet arama terimi onu getirecektir. En son ön sürüm 1.1.0-preview4-final'dir.
K7Buoy

4

Bu problemle karşılaştıysanız ve asp.net çekirdeğini CLI aracıyla çalıştırdıysanız, <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> xx.csproj dosyasına ekleyerek çözebilirsiniz ve dotnet restore . Daha sonra dotnet ef komutunu kullanabilirsiniz.


Aslında aynı sorunla karşılaştım. 2.0.2 Microsoft.EntityFrameworkCore.Tools.DotNet kullanıyordum ve projeyi güncelledim, projeyi yeniden yükledim ve yeniden test edip çalıştı. Teşekkürler!
Miles

1

VS Package Manager Console'da ayrı bir konsol penceresi açmak yerine aşağıdaki komutları yazın ve çalıştırın:

Taşıma ekleyin

Add-Migration <migration name>

Son taşımayı kaldır

Remove-Migration

Bir geçiş uygulanmadan önce (veya geçişi uygulamak için):

Update-Database

Geçiş uygulandığında:

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

HTH

DÜZENLEME : MVC çekirdek projenizde aşağıdaki sınıfa da ihtiyacınız olabilir:

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

Benim durumumda dotnet ef mevcut değildi ve dotnet -hçalıştırıldığında listede gösterilmiyor .

Aşağıdaki komutla global olarak dotnet-ef kurdum ve artık onu kullanabiliyorum. Ama yine de listede yok.

dotnet tool install -g dotnet-ef 

0

Ayrı bir sınıf kitaplığı projesi kullanıyordum. Paket yöneticisi konsolunda yukarıdakilerin hepsini denedikten ve başarısız olduktan sonra. Komut istemi kullandım ve işe yaradı! Tuhaf. Ancak, kredi gider bu makaleye . Ayrı bir sınıf kitaplığı projesi kullanıyorsanız, bu sizin çözümünüzdür.


0

Visual Studio 2017 altında bu komutları paket yöneticisi konsolundan çalıştırmam gerekiyordu

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

Araçlar bölümünde aşağıdaki kodu ekleyin,

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

Bu kod biçimi hatamı çözdü.


0

Bir NuGet Paketi eklerken varsayılan olarak, bir PackageReference olarak eklenecektir, bu yanlıştır, bu nedenle manuel olarak düzenleyin

1- .csproj dosyasını düzenleyin

2- "PaketReferans" dan değişiklik:

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.