Ошибка переноса сущности Framkework - PullRequest
0 голосов
/ 07 июня 2018

Я создаю тестовое приложение (обучение) с использованием .Net Core 2 и Angular 5.

Из корневой папки, где находится файл csproj, в PowerShell после следующего выполнения возникает ошибка

Команда

dotnet ef migrations add "Initial" -o "Data\Migrations"

Ошибка

PS C:\Users\T460SU\Documents\Training\Learning-Examples\Api-Angular2018\NetCore2Angular5\TestMakerFreeApp\TestMakerFreeApp> dotnet ef migrations add "Initial" -o "Data\Migrations"
No executable found matching command "dotnet-ef"

После просмотра различных сообщений, похоже, я пропускаю Microsoft.EntityFrameworkCore.Tools.DotNet.Когда я пытаюсь установить этот пакет, это приводит к следующей ошибке

PM> Install-Package Microsoft.EntityFrameworkCore.Tools.DotNet -Version 2.0.3
  GET https://api.nuget.org/v3/registration3-gz-semver2/microsoft.entityframeworkcore.tools.dotnet/index.json
  OK https://api.nuget.org/v3/registration3-gz-semver2/microsoft.entityframeworkcore.tools.dotnet/index.json 70ms
Restoring packages for C:\Users\T460SU\Documents\Training\Learning-Examples\Api-Angular2018\NetCore2Angular5\TestMakerFreeApp\TestMakerFreeApp\TestMakerFreeApp.csproj...
Install-Package : Detected package downgrade: Microsoft.NETCore.App from 2.0.7 to 2.0.0. Reference the package directly from the project to select a different version. 
 TestMakerFreeApp -> Microsoft.EntityFrameworkCore.Tools.DotNet 2.0.3 -> Microsoft.NETCore.App (>= 2.0.7) 
 TestMakerFreeApp -> Microsoft.NETCore.App (>= 2.0.0)
At line:1 char:1
+ Install-Package Microsoft.EntityFrameworkCore.Tools.DotNet -Version 2 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

Install-Package : Package 'Microsoft.EntityFrameworkCore.Tools.DotNet 2.0.3' has a package type 'DotnetCliTool' that is not supported by project 'TestMakerFreeApp'.
At line:1 char:1
+ Install-Package Microsoft.EntityFrameworkCore.Tools.DotNet -Version 2 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

Time Elapsed: 00:00:01.1203778

Вот установленные в настоящее время пакеты nuget

enter image description here

Как я могу это исправить? Обновление 1: файл csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
    <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
  </ItemGroup>

  <ItemGroup>
    <!-- Files not to publish (note that the 'dist' subfolders are re-added below) -->
    <Content Remove="ClientApp\**" />
  </ItemGroup>

  <ItemGroup>
    <None Remove="ClientApp\app\components\about\about.component.ts" />
    <None Remove="ClientApp\app\components\login\login.component.ts" />
    <None Remove="ClientApp\app\components\pagenotfound\pagenotfound.component.ts" />
    <None Remove="ClientApp\app\components\quiz\quiz-list.component.ts" />
    <None Remove="ClientApp\app\components\quiz\quiz.component.ts" />
    <None Remove="ClientApp\app\interfaces\quiz.ts" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.8" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.5" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0" />
  </ItemGroup>

  <ItemGroup>
    <TypeScriptCompile Include="ClientApp\app\components\about\about.component.ts" />
    <TypeScriptCompile Include="ClientApp\app\components\login\login.component.ts" />
    <TypeScriptCompile Include="ClientApp\app\components\pagenotfound\pagenotfound.component.ts" />
    <TypeScriptCompile Include="ClientApp\app\components\quiz\quiz-list.component.ts" />
    <TypeScriptCompile Include="ClientApp\app\components\quiz\quiz.component.ts" />
    <TypeScriptCompile Include="ClientApp\app\interfaces\quiz.ts" />
  </ItemGroup>

  <Target Name="DebugRunWebpack" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('wwwroot\dist') ">
    <!-- Ensure Node.js is installed -->
    <Exec Command="node --version" ContinueOnError="true">
      <Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
    </Exec>
    <Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />

    <!-- In development, the dist files won't exist on the first run or when cloning to
         a different machine, so rebuild them if not already present. -->
    <Message Importance="high" Text="Performing first-run Webpack build..." />
    <Exec Command="node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js" />
    <Exec Command="node node_modules/webpack/bin/webpack.js" />
  </Target>

  <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
    <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <Exec Command="npm install" />
    <Exec Command="node node_modules/webpack/bin/webpack.js --config webpack.config.vendor.js --env.prod" />
    <Exec Command="node node_modules/webpack/bin/webpack.js --env.prod" />

    <!-- Include the newly-built files in the publish output -->
    <ItemGroup>
      <DistFiles Include="wwwroot\dist\**; ClientApp\dist\**" />
      <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
        <RelativePath>%(DistFiles.Identity)</RelativePath>
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      </ResolvedFileToPublish>
    </ItemGroup>
  </Target>

</Project>

1 Ответ

0 голосов
/ 07 июня 2018

Не могли бы вы объединить ваши основные версии .net, чтобы у вас был чистый лист.

Если вы используете 2.0.x (или меньше), вам нужно добавить это в файл проекта (csproj) проекта, содержащий логику вашей базы данных

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

Кроме того, вашКоманда add migration также должна включать ваш проект Startup, если уровень базы данных является отдельным проектом.Команда dotnet ef должна быть выполнена из пути проекта базы данных, и она должна выглядеть примерно так:

dotnet ef --startup-project ..\Path\To\Startup migrations add Initial -c YourDatabaseContext

, где файл запуска проекта также должен содержать ссылку DotNetCliToolReference.

Я не видел, чтобы вы упоминали контексты базы данных, но я уверен, что у вас должен быть один.

Если вы переключитесь на .net core версии 2.1.0, все останется прежним, за исключением того, что инструмент CLI теперьчасть пакета основного объекта, поэтому вы можете удалить ссылки CLI из файлов csproj.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...