Запустите инструмент восстановления do tnet, чтобы сделать команду do tnet -ef доступной - PullRequest
2 голосов
/ 25 февраля 2020

У меня довольно странная ситуация с миграциями Visual Studio и EF в профиле Publi sh. Дано:

  • Visual Studio 2019 v16.4
  • . NET Базовый проект. Цели. NET Core 3.1
  • EF 3.1
  • Azure publi sh profile

Я создал миграции в локальном проекте и при попытке перечислять миграции в профиле publi sh, я получаю

Run dotnet tool restore to make the dotnet-ef command available

enter image description here

Я не знаю, что означает эта ошибка, потому что tnet -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 <...> тоже работает. Единственное место, где они не работают - опубликовать sh настройки профиля. Я не могу установить флажок для запуска миграций в publi sh.

Data, проект ссылался на следующие пакеты, связанные с 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 из-за ошибки tnet ef dbcontext - json

Кажется, что их общая проблема в том, что у них не было установленных инструментов, потому что dotnet ef команды больше не являются частями. NET Core SDK, и это не мой случай, так как локальные инструменты EF установлен и работает из командной строки.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Я нашел 2 способа

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

  2. если (1.) не работает, в проекте введите dotnet new tool-manifest, dotnet tool install dotnet-ef, dotnet tool restore.

Описание

Каким-то образом Visual Studio не может получить доступ к C: //Users/AlexanderK/.nuget, где установлены глобальные пакеты. На нашем p c может быть некоторое программное обеспечение, которое блокирует Visual Studio для доступа к глобально установленным пакетам , Я не уверен, как работает nuget, но npm для nodejs работает как поиск в локально и глобально установленных пакетах. Таким образом, в нашем случае для Visual Studio нет установленного локально do tnet -ef, в то время как мы не можем получить к нему глобальный доступ.

В (1.) мы запускаем от имени администратора и пытаемся дать права Visual Studio на доступ глобально установленные пакеты.

В (2.) мы устанавливаем do tnet -ef локально, поэтому nuget наверняка найдет пакет локально.

Подробнее о dotnet tool командах - Официальные документы

Я рекомендую вам использовать (1.), потому что большинство компьютеров не имеют такой проблемы, и установка пакетов типа do tnet -ef локально не является хорошей идеей, когда она у вас есть. глобально ..

0 голосов
/ 07 марта 2020

Проверьте, какие. NET Версии платформы Core SDK, которые вы установили ... 32-битную или 64-битную или обе.

Если у вас есть обе, я думаю, VS2019 будет использовать все, что найдет первым, это может быть не тот инструмент, в котором установлены инструменты EF Core.

...