在.net核心上创建EF迁移时出现System.IO.FileNotFoundException

Rob*_*lls 7 c# entity-framework-core .net-core

我有一个.NET Core 2.2项目,正在尝试设置EF迁移。

运行时:

dotnet ef迁移添加了init --verbose

我收到以下错误:

查找提供程序'Microsoft.EntityFrameworkCore.SqlServer'的设计时服务...使用提供程序'Microsoft.EntityFrameworkCore.SqlServer'的设计时服务。查找程序集“ myproject-api”引用的设计时服务。找不到参考的设计时服务。在程序集“ myproject-api”中查找IDesignTimeServices实现...未找到设计时服务。System.IO.FileNotFoundException:无法加载文件或程序集“ myproject,Culture = neutral,PublicKeyToken = null”。该系统找不到指定的文件。

这是我的csproj文件:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.4" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.4" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

编辑,这是我的Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
          WebHost.CreateDefaultBuilder(args)
            .UseKestrel()
            .UseUrls("http://localhost:5004")
            .UseStartup<Startup>();

}
Run Code Online (Sandbox Code Playgroud)

Red*_*one 2

EF Core 的设计时间分辨率在很大程度上依赖于命名约定以及将配置放在正确的位置。不过你的Program班级看起来不错。

您能否检查您的 Startup 类是否与此类似并且AddDbContextConfigureServices方法中具有所需的调用?

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    }
}
Run Code Online (Sandbox Code Playgroud)