Запустите восстановление инструмента dotnet, чтобы сделать команду dotnet-ef доступной.
У меня довольно странная ситуация с миграциями Visual Studio и EF в профиле публикации. Данный:
- Visual Studio 2019 v16.4
- Проект.NET Core. Нацелен на.NET Core 3.1
- EF 3.1
- Профиль публикации Azure
Я создал миграции в локальном проекте, и при попытке перечислить миграции в профиле публикации я получаю
Run dotnet tool restore to make the dotnet-ef command available
Я не знаю, что означает эта ошибка, потому что инструменты dotnet-ef кажутся установленными:
PM> dotnet --version
3.1.101
PM> dotnet ef --version
Entity Framework Core .NET Command-line Tools
3.1.1
PM> dotnet ef dbcontext list --json --project MyUIProject
Build started...
Build succeeded.
[
{
"fullName": "MyDataProject.MyDbContext",
"safeName": "MyDbContext",
"name": "MyDbContext",
"assemblyQualifiedName": "MyDataProject.MyDbContext, MyDataProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
}
]
PM> dotnet tool restore
Restore was successful.
PM>
Последняя строка ничего не меняет. Я могу использовать команды PS, такие какAdd-Migration
, Update-Database
или команды cmd, такие как dotnet ef migrations add
, dotnet ef database update
. dotnet-ef <...>
тоже работать. Единственное место, где они не работают - опубликовать настройки профиля. Я не могу установить флажок для запуска миграции при публикации.
Data
project ссылается на эти связанные с EF пакеты:
<...>
<PackageReference Include="microsoft.aspnetcore.Identity.EntityFrameworkCore" Version="3.1.1" />
<PackageReference Include="microsoft.EntityFrameworkCore" Version="3.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="System.Data.SqlClient" Version="4.8.0" />
<...>
UI
только ссылки на проекты Design
:
<...>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<...>
Есть много похожих вопросов, например: Невозможно перечислить миграции Entity Framework в Visual Studio 2019 из-за ошибки dotnet ef dbcontext --json
Похоже, их общая проблема в том, что у них не было установленных инструментов, потому что dotnet ef
Команды больше не являются частью.NET Core SDK, и это не мой случай, поскольку локальные инструменты EF установлены и работают из командной строки.
3 ответа
Я нашел 2 способа
попробуйте запустить Visual Studio от имени администратора.
если (1.) не работает, в проекте введите
dotnet new tool-manifest
,dotnet tool install dotnet-ef
,dotnet tool restore
.
Описание
Почему-то Visual Studio не может получить доступ к C://Users/AlexanderK/.nuget, где установлены глобальные пакеты. На нашем компьютере может быть какое-то программное обеспечение, которое блокирует доступ Visual Studio к глобально установленным пакетам. Я не уверен, как работает nuget, но npm для nodejs работает как поиск в локально и глобально установленных пакетах. Таким образом, в нашем случае для Visual Studio не установлен локально dotnet-ef, а глобальный доступ к нему недоступен.
В (1.) мы запускаемся от имени администратора и пытаемся предоставить Visual Studio права на доступ к глобально установленным пакетам.
В (2.) мы устанавливаем dotnet-ef локально, поэтому nuget наверняка найдет пакет локально.
Больше о dotnet tool
команды - Официальные документы
Я рекомендую вам использовать (1.), потому что на большинстве ПК такой проблемы нет, и установка пакетов, таких как dotnet-ef, локально не является хорошей идеей, если она у вас глобальная.
Проверьте, какие версии платформы.NET Core SDK у вас установлены... 32-разрядная или 64-разрядная или обе.
Если у вас есть оба, я думаю, VS2019 будет использовать все, что найдет в первую очередь, а это может быть не то, в котором установлены инструменты EF Core.
У меня была такая же проблема (после обновления Visual Studio 2019), на моем компьютере эта проблема есть, но на другом компьютере нет. Файлы все равны (проверено через git), VS2019 что-то где-то кеширует и это плохо.
1 Убедитесь, что строка подключения по умолчанию в порядке.
2 Проверьте, установлен ли dotnet ef. В ядре 3.1 необходимо установить:dotnet tool install -g dotnet-ef
3 Закройте VS, удалите папку <yourproject>/Properties
(сделайте резервную копию, если хотите), откройте VS, очистите решение и снова импортируйте файл публикации.