核心3.1:无法在.DLL项目中运行dotnet ef迁移未找到框架

问题描述

将项目升级到Core 3.1后遇到问题。

我在类库(DLL)中安装了EF Core。当我跑步

dotnet ef migrations add Init --context TransferDbContext --verbose

我得到了错误:

Build started...
Build succeeded.
It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.App',version '3.1' was not found.
  - The following frameworks were found:
      3.1.7 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

You can resolve the problem by installing the specified framework and/or SDK.

The specified framework can be found at:
  - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=3.1&arch=x64&rid=win10-x64  

呼叫失败是:

dotnet exec 
    --depsfile C:\tfs\DigitalEksamenIntegration\DigitalEksamenIntegrationBusiness\bin\Debug\netcoreapp3.1\win-x64\DigitalEksamenIntegrationBusiness.deps.json 
    --additionalprobingpath C:\Users\dalby\.nuget\packages --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" 
    --runtimeconfig C:\tfs\DigitalEksamenIntegration\DigitalEksamenIntegrationBusiness\bin\Debug\netcoreapp3.1\win-x64\DigitalEksamenIntegrationBusiness.runtimeconfig.json 
    C:\Users\dalby\.dotnet\tools\.store\dotnet-ef\3.1.0\dotnet-ef\3.1.0\tools\netcoreapp3.1\any\tools\netcoreapp2.0\any\ef.dll migrations 
    add Init --context TransferDbContext 
    --assembly C:\tfs\DigitalEksamenIntegration\DigitalEksamenIntegrationBusiness\bin\Debug\netcoreapp3.1\win-x64\DigitalEksamenIntegrationBusiness.dll 
    --startup-assembly C:\tfs\DigitalEksamenIntegration\DigitalEksamenIntegrationBusiness\bin\Debug\netcoreapp3.1\win-x64\DigitalEksamenIntegrationBusiness.dll 
    --project-dir C:\tfs\DigitalEksamenIntegration\DigitalEksamenIntegrationBusiness\ 
    --language C# 
    --working-dir C:\tfs\DigitalEksamenIntegration\DigitalEksamenIntegrationBusiness 
    --verbose 
    --root-namespace DigitalEksamenIntegration.Business

我的

dotnet --info

列出以下内容:

.NET Core SDK (reflecting any global.json):
 Version:   3.1.401
 Commit:    5b6f5e5005

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18363
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.401\

Host (useful for support):
  Version: 3.1.7
  Commit:  fcfdef8d6b

.NET Core SDKs installed:
  3.1.401 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.21 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 3.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.7 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

dotnet-core-uninstall list列表

This tool can not uninstall versions of the runtime or SDK that are 
    - SDKs installed using Visual Studio 2019 Update 3 or later.
    - SDKs and runtimes installed via zip/scripts.
    - Runtimes installed with SDKs (these should be removed by removing that SDK).
The versions that can be uninstalled with this tool are:

.NET Core SDKs:
  3.1.401  x64    [Used by Visual Studio. Specify individually or use --force to remove]

.NET Core Runtimes:
  3.1.7  x64
  2.2.7  x64  

我一直在尝试设置global.json,但似乎没有效果。

我的cjsproj看起来像这样(简化版):

        <Project Sdk="Microsoft.NET.Sdk">
          <PropertyGroup>
            <TargetFramework>netcoreapp3.1</TargetFramework>
            <RootNamespace>DigitalEksamenIntegration.Business</RootNamespace>
            <RuntimeFrameworkVersion>3.1</RuntimeFrameworkVersion>
            <RuntimeIdentifier>win-x64</RuntimeIdentifier>
          </PropertyGroup>

          <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
            <PlatformTarget>AnyCPU</PlatformTarget>
          </PropertyGroup>


          <ItemGroup>
            <Reference Include="EntityFramework">
              <HintPath>..\DigitalEksamenIntegration.Web\Lib\EntityFramework.dll</HintPath>
            </Reference>
          </ItemGroup>
          <ItemGroup>
            <Folder Include="Migrations\" />
          </ItemGroup>
          <ItemGroup>
            <WCFMetadata Include="Connected Services" />
          </ItemGroup>
          <ItemGroup>
            <None Update="MailReport_Layout.template.txt">
              <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
              <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
            </None>
            <None Update="MailReport_StudentsMissingInRegistrations.template.txt">
              <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
              <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
            </None>
          </ItemGroup>

        </Project>

一些报告表明这是一个工具问题,所以我尝试了:

   dotnet tool uninstall -g dotnet-ef
   dotnet tool install -g dotnet-ef --version 3.1.7

但这也不起作用。

感谢您的帮助。

谢谢。

亲切的问候 索伦

解决方法

尝试一下:

dotnet tool install -g dotnet-ef --version 3.1.0

在从nuget进行的porject安装中

Microsoft.EntityFrameworkCore.Design

然后,添加--verbose来查看可能的警告

dotnet ef migrations add Init --context TransferDbContext --verbose
,

我找到了解决方案-或更确切地说是回避:

我编辑了位于输出目录中的runtimeconfig.json。就我而言:bin\Debug\netcoreapp3.1\win-x64\<ProjectName>.runtimeconfig.json(用项目名称替换<ProjectName>)。

字段version之前包含版本号3.1。我对其进行了编辑,使其包含值3.1.7

    {
      "runtimeOptions": {
        "tfm": "netcoreapp3.1","framework": {
          "name": "Microsoft.NETCore.App","version": "3.1.7"
        }
      }
    }

我终于能够迁移数据库。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...