Запустите восстановление инструмента 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 способа

  1. попробуйте запустить Visual Studio от имени администратора.

  2. если (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, очистите решение и снова импортируйте файл публикации.

Другие вопросы по тегам