Termin „Add-Migration” nie jest rozpoznawany

116

Używam tego samouczka MSDN, aby uruchomić w VS2015 polecenie, PM> Add-Migration MyFirstMigration -context BloggingContextktóre zostało pomyślnie uruchomione wczoraj, ale dziś daje następujący błąd, który jest również wskazywany przez innych użytkowników tutaj . Usunąłem nawet folder Migracje z eksploratora rozwiązań i odpowiednią bazę danych z, SQL Express 2014 on Win 8.1ale ten sam błąd. Nawet jeśli uruchomię, Add-Migration MyFirstMigrationpojawia się ten sam błąd:

Add-Migration : The term 'Add-Migration' is not recognized as the name of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ Add-Migration MyFirstMigration -context BloggingContext
+ ~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Add-Migration:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Uwaga : używam najnowszej wersji ASP.NET Core 1.0 i VS2015 - aktualizacja 3 wydana 27 czerwca 2016 r.

AKTUALIZACJA

Następujące polecenia działają poprawnie z katalogu projektu w eksploratorze Windows podczas korzystania z okna poleceń:

> dotnet ef migrations add MyFirstMigration --context BloggingContext
> dotnet ef database update --context BloggingContext

AKTUALIZACJA 2a

Poniżej znajduje się plik project.json:

{
  "userSecretsId": "aspnet-ASPCore_RTM_CodeFirst_test-bef835d9-9831-41a8-bc3a-cd2f1477a880",

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": {
      "version": "1.0.0",
      "type": "build"
    },
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    }
  },

  "tools": {
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": [
        "portable-net45+win8"
      ]
    }
  },

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

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

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

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

  "scripts": {
    "prepublish": [ "bower install", "dotnet bundle" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}
nam
źródło
Proszę nie umieszczać tagów w tytule
Tseng,
napisz proszę swój project.json Chcę zobaczyć twoje pakiety
Bassam Alugili
@BassamAlugili na twoją prośbę, dodałem UPDATE 2 w moim poście, aby dodać odpowiednią sekcję pliku peoject.json. Daj mi znać, jeśli potrzebujesz więcej informacji
nam
Dostałeś odpowiedź od @briceIam (zespół EF). Myślę, że to zadziała!
Bassam Alugili
@BassamAlugili Dodałem całą zawartość pliku project.json w sekcji UPDATE 2 mojego postu. Proszę zobaczyć moje komentarze pod odpowiedzią od @bricelam. Czego może mi brakować?
nam

Odpowiedzi:

233

To takie proste.

Po prostu zainstaluj Microsoft.EntityFrameworkCore.Toolspakiet z nuget:

Zainstaluj pakiet Microsoft.EntityFrameworkCore.Tools - wersja 3.1.5

Możesz również użyć tego linku, aby zainstalować najnowszą wersję: łącze do pakietu NuGet

Polecenie .NET CLI:

dotnet add package Microsoft.EntityFrameworkCore.Tools
Nasir Jafarzadeh
źródło
Zainstalowałem wersję 2.2.6, ponieważ nadal używam programu Visual Studio 2017.
BluE
Wielkie
1
Musiałem również zrestartować Visual Studio
Liviu Sosu
48

Spróbuj wykonać następujące czynności:

1) Otwórz project.jsonplik i usuń wszystkie odniesienia Microsoft.EntityFrameworkCore.Tools z sekcji zależności i narzędzi .

2) Zamknij konsolę Menedżera pakietów ( PMC ) i uruchom ponownie program Visual Studio

3) Dodaj w sekcji zależności :

 "Microsoft.EntityFrameworkCore.Tools": {
  "version": "1.0.0-preview2-final",
  "type": "build"
 }

4) Dodaj ramach narzędzi sekcji

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

5) Uruchom ponownie program Visual Studio 2015

6) Otwarty PMC i typ

Add-Migration $Your_First_Migration_Name$

Dzieje się tak, ponieważ PMC rozpoznaje narzędzia podczas uruchamiania programu Visual Studio.

Gianpolo
źródło
5
Ledwo mogę przejść przez godzinę kodowania na VS2015 bez konieczności ponownego uruchamiania / ponownej instalacji ...
Ryan Murphy
37

Upewnij Microsoft.EntityFrameworkCore.Toolssię, że odwołanie znajduje się w dependenciessekcji twojego project.json. NuGet nie załaduje poleceń Menedżera pakietów z toolssekcji. (Zobacz NuGet / Home # 3023 )

{
  "dependencies": {
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    }
  }
}
bricelam
źródło
2
Skopiowałem całą zawartość pliku project.json w UPDATE 2 mojego postu. Sekcja Microsoft.EntityFrameworkCore.Toolsjest również wewnątrz zależności. Te Add-Migrationi Update-Databasepoleceń, zgodnie z instrukcjami w tutorialu pracował nocy. Ale kiedy wypróbowałem je następnego ranka po wprowadzeniu drobnych zmian w moim modelu i spróbowałem ponownie tych poleceń, dały komunikat o błędzie opisany w moim poście. Usunąłem nawet folder migracji i odpowiednią bazę danych z serwera SQL, ale po uruchomieniu tych poleceń otrzymałem ten sam komunikat o błędzie. Czego może mi brakować?
nam
Też mam te symptomy. Używam programu Visual Studio 2015 Update 3
Kolya_Net,
Spróbuj zgłosić błąd w NuGet za pomocą powtarzalnych kroków i wielu informacji o środowisku. Wspomniałem o problemach w tym obszarze przed zespołem, ale nigdy nie są w stanie ich powtórzyć.
bricelam
1
Dziwne, to rozwiązuje mój problem, jeśli usunę go z toolsi ponownie dodam po. Po prostu przeniesienie go do dependenciesspowoduje wyświetlenie następującego komunikatu o błędzie: Nie można wykonać tego polecenia, ponieważ „Microsoft.EntityFrameworkCore.Tools” nie jest zainstalowany w projekcie „src \ <your project>”. Dodaj „Microsoft.EntityFrameworkCore.Tools” do sekcji „narzędzia” w pliku project.json. Więcej informacji można znaleźć na stronie go.microsoft.com/fwlink/?LinkId=798221 .
Thorsten Westheider
Używam VS2017 ASP.NET Core i miałem ten sam problem. Ta odpowiedź również rozwiązała problem!
Westerlund.io
14

ten sam problem ... rozwiązany przez dong następujący

1.) Zamknij menedżera pm 2.) Zamknij program Visual Studio 3.) Otwórz program Visual Studio 4.) Otwórz menedżera pm

wydaje się, że cała sztuka polega na zamknięciu PM Managera przed zamknięciem VS

Bhail
źródło
Tak, przeładowanie PM i VS jest rozwiązaniem, dzieje się tak, gdy otwieramy projekt w najnowszym studiu wizualnym, które było wcześniej stworzone w starszym. Otwierając taki kod, VS próbuje kilku automatycznych poprawek, które można zobaczyć poprawnie, tylko po ponownym uruchomieniu PM i VS.
Malik Khalil
9

Ja też miałem ten problem. Zamknąłem i otworzyłem VS2015 i "naprawiłem" problem ...

Josh
źródło
Właśnie tak się stało w VS 2019 Community Edition.
Gabe
9

Musisz wiedzieć, jaka jest twoja Entity-Frameworkwersja. Następnie musisz sprawdzić project.jsoni kontrolować te sekcje:

W zależnościach

czek:

Microsoft.EntityFrameworkCore.Tools": {
  "version": "1.0.0-preview2-final",
  "type": "build"
},

Ta sekcja:

"wersja": "1.0.0-preview2-final",

jest powiązany z twoją wersją Entity-Frameworki musisz to zmienić.

Po tym druga sekcja proj.jsonjest tutaj, W tej Toolssekcji JSONmasz:

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

Również ta część kodu jest związana z Twoją Entity-Frameworki ostatnią częścią kodu w sekcji Zależności .

Uwaga: po wykonaniu tej czynności należy zamknąć CMDi ponownie uruchomić program Visual Studio.

AmirReza-Farahlagha
źródło
6

Co musiałem zrobić ...

1) Narzędzia -> Menedżer pakietów Nuget -> Ustawienia menedżera pakietów

2) Zakładka Ogólne

3) Wyczyść wszystkie pamięci podręczne NuGet

4) Uruchom ponownie program Visual Studio

Justin McConnell
źródło
5

Po prostu spróbuj uruchomić Microsoft.EntityFrameworkCore.Tools. W PM wykonaj

C:\Users\<username>\.nuget\packages\Microsoft.EntityFrameworkCore.Tools\1.0.0-preview2-final\tools\init.ps1.

Pomogło mi to z tym samym problemem. Wersja narzędzi może być inna. Zależy to od tego, czego użyjesz w swoim projekcie.

trueboroda
źródło
1
W moim przypadku używam ścieżki względnej. \ Packages \ Microsoft.EntityFrameworkCore.Tools.1.1.0 \ tools \ init.ps1 Dzieje się tak, ponieważ bieżący katalog PM jest już katalogiem rozwiązania, ale dla mnie pakiet narzędzi jest częścią Rozwiązanie. Osobiście uważam, że jest to najlepsze rozwiązanie, ponieważ nie ma ponownego uruchamiania, edycji, ponownej instalacji. Zajmuje to chwilę i działa.
William Leader
4

Napotkałem ten sam problem. Większość moich projektów zawierała te same narzędzia.

"tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
}

To działało dobrze we wszystkich projektach oprócz jednego. Zmieniłem wpis w narzędziach na

"tools": {
    "Microsoft.EntityFrameworkCore.Tools": {
    "version": "1.0.0-preview2-final",
    "type": "build"
  }
}

A potem uciekł dotnet restore. Po zakończeniu przywracania Add-Migrationdziałał normalnie.

smulholland2
źródło
2

Miałem ten sam problem i stwierdziłem, że był to problem z wersjonowaniem programu Visual Studio w pliku rozwiązania.

Miałem na celu:

VisualStudioVersion = 14.0.25123.0

Ale musiałem celować w:

VisualStudioVersion = 14.0.25420.1

Po wprowadzeniu tej zmiany bezpośrednio w pliku rozwiązania polecenia cmdlet EF Core zaczęły działać w konsoli Menedżera pakietów.

Joel Waymack
źródło
Dziękuję za próbę pomocy. Używam wersji, 14.0.25421.03 Update 3która jest jeszcze wyższa niż ta, której używasz.
nam
2

Oto kroki, które wykonałem i rozwiązało problem

1) Zaktualizowałem moją powłokę Power z wersji 2 do 3

2) Zamknięto konsolę PM

3) Ponownie uruchomiono program Visual Studio

4) Uruchomiono poniższe polecenie w przywracaniu dotnet konsoli PM

5) Add-Migration InitialMigration

Zadziałało !!!

Karthik
źródło
1

Miałem ten problem i żadne z poprzednich rozwiązań mi nie pomogło. Mój problem był w rzeczywistości spowodowany przestarzałą wersją programu PowerShell na moim komputerze z systemem Windows 7 - po aktualizacji do programu PowerShell 5 zaczął działać.

Lee Cordell
źródło
1

Przejdź do konsoli menedżera pakietów (w programie Visual Studio) i wykonaj poniższe polecenie

C:\Users\<YOUR_USER>\.nuget\packages\Microsoft.EntityFrameworkCore.Tools\<YOUR_INSTALLED_VERSION>\tools\init.ps1

Shivendra
źródło
0

Myślę, że odpowiedź wymaga aktualizacji w 2017 r., Ponieważ MS wprowadziło pewne (przełomowe) zmiany, które są szczegółowo opisane tutaj.

https://github.com/aspnet/EntityFramework/issues/7053

Podsumowując, będziesz teraz potrzebować odniesienia do EntityFrameWorkCore.Tools.DotNet w sekcji Narzędzia, jak poniżej

„Microsoft.EntityFrameworkCore.Tools.DotNet”: „1.0.0”

Opublikowałem również działający plik project.json poniżej na wypadek, gdyby ktoś miał problemy.

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
    "Microsoft.Extensions.Configuration.Json": "1.0.1",
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    }
  },

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

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

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

  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },

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

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}
Francis
źródło
Prawdopodobnie będziesz musiał ponownie ponownie uruchomić program Visual Studio.
Franciszek
0

Próbowałem zrobić wszystko powyżej i bez powodzenia. Pobrałem najnowszy pakiet .net core 2.0 i uruchomiłem ponownie polecenia i zadziałało.

Tyrone Moodley
źródło
Czy .net core 2.0 jest teraz stabilny, więc projekt można uaktualnić z 1.1.1do 2.0?
nam
1
NET Core 2.0 jest dostępna od wczoraj 14 sierpnia 2017 jako wersja ostateczna. blogs.msdn.microsoft.com/dotnet/2017/08/14/…
Tyrone Moodley
0

W moim przypadku dodałem zależność przez Nuget:

Microsoft.EntityFrameworkCore.Tools

Następnie uruchom za pomocą konsoli Menedżera pakietów:

add-migration Initial -Context "ContextName" -StartupProject "EntryProject.Name" -Project "MigrationProject.Name"
Erçin Dedeoğlu
źródło
0

Oto, co zadziałało dla mnie: w programie Visual Studio kliknij

Narzędzia -> Menedżer pakietów NuGet -> Konsola Menedżera pakietów

wprowadź opis obrazu tutaj

Następnie możesz biegać Add-Migrationnp .:

Add-Migration InitialCreate
Seif
źródło