实体框架迁移添加失败

学习...

我正在使用 .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包

在此处输入图片说明

我怎样才能解决这个问题?更新 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>
米兰·维达科维奇

能否请您合并您的 .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 核心版本 2.1.0,一切都保持不变,除了 CLI 工具现在是核心实体包的一部分,因此您可以从 csproj 文件中删除 CLI 引用。

希望能帮助到你

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章