您的启动项目没有引用Microsoft.EntityFrameworkCore.Design

时间:2018-09-27 12:03:14

标签: c# visual-studio nuget entity-framework-core

我的解决方案中有2个项目,有一个安装了Entity Framework Core的项目:

enter image description here

在另一个ASP.NET Web API项目中,我具有以下软件包:

sudo cp ~/Downloads/swt.jar
plugins/org.eclipse.swt.cocoa.macosx.x86_64_3.103.1.v20140903-1947.jar

当我在PMC中运行jmc时:

  

您的启动项目“ API”未引用   Microsoft.EntityFrameworkCore.Design。该软件包是   实体框架核心工具正常工作。确保您的启动项目是   正确,安装软件包,然后重试。

我在启动项目中安装了Microsoft.EntityFrameworkCore.Design,而不是在包含所有实体的数据项目中安装了它,现在它可以工作了,这是应该如何设置项目的?

22 个答案:

答案 0 :(得分:17)

请确保您已安装以下软件包。 我也遇到同样的错误,并安装在软件包下面,对我有用。

Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Tools

答案 1 :(得分:16)

没有一个选项对我有用。但是我尝试过的一个方法起作用了: EF Core 3 design time migrations broken by Microsoft.EntityFrameworkCore.Design DevelopmentDependency

在将包导入到Data项目之后,我刚刚注释了以下内容:

<ItemGroup>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.5">
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  <!--<PrivateAssets>all</PrivateAssets>-->
</PackageReference>

非常感谢Microsoft,每次发布新的.NetCore更新时都会破坏现有项目!

答案 2 :(得分:14)

“您的'项目名称'不涉及您的启动项目Microsoft.EntityFrameworkCore.Design。此包对于Entity Framework Core Tools起作用是必需的。请确保您的启动项目正确,安装该包,然后重试。 “

如果遇到此错误,请在项目中尝试“构建>清洁解决方案” ,然后再次尝试运行命令。

这在我的项目中起作用。或者,您可能想看看documentation

我在项目中使用.Net Core 3.1版本。

答案 3 :(得分:4)

我在这里找到了解决方法:http://obscureproblemsandgotchas.com/development/c/dotnet-core-ef-migration-not-working/

简而言之,编辑您的csproj文件,然后将其添加到您的PropertyGroup部分,如下所示:

<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>

答案 4 :(得分:3)

在拥有单独的数据项目的同时,绝对没有理由将 Microsoft.EntityFrameworkCore.Design 安装到您的 API 项目中。

快速解决方案

使用 add-migration 时,只需添加一个参数以将 -StartUpProject 设置为您的数据项目(默认情况下,我假设您的启动项目是 API 项目)。


示例添加迁移命令如下:

add-migration {migration_name} -StartUpProject {your_data_proj_name} -project {your_data_proj_name} -v

示例更新数据库命令如下:

update-database -StartUpProject {your_data_proj_name} -project {your_data_proj_name} -v

希望对大家有帮助

PS:可以找到有关添加迁移参数的更多信息here

答案 5 :(得分:3)

您可以使用以下命令解决此问题

dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design

答案 6 :(得分:2)

当我删除 .csproj 或

中的私人资产时,它对我有用

EFCore.Design

不将私有资产财产全部通过包裹的财产

答案 7 :(得分:2)

我收到此错误是因为Visual Studio默认将实体框架核心而不是.NET Framework的老式实体框架用于实体框架6。这是我的解决方案:

EntityFramework\Update-Database

或明确引用版本:

EntityFramework6\Update-Database

在程序包管理器控制台中,还值得检查正确的项目。那样喜欢一半时间潜回其他项目!

答案 8 :(得分:1)

我在解决方案中有多个项目时遇到了同样的问题。我正在犯的错误是我没有选择相关项目作为

程序包管理器控制台中的默认项目

。 因此,请检查您是否在Package Manager控制台中选择了要运行迁移命令的默认项目。

答案 9 :(得分:1)

请确保您安装了以下软件包的相同版本:

  1. Microsoft.EntityFrameworkCore.SqlServer
  2. Microsoft.EntityFrameworkCore.Design

我也遇到了同样的错误,并重新安装了相同版本的软件包,它对我有用。

答案 10 :(得分:1)

实体框架核心和实体框架6都是 已安装。实体框架核心工具正在运行。采用 实体框架6的“ EntityFramework6 \ Add-Migration”。

解决方案为EntityFrameworkCore\Add-Migration

答案 11 :(得分:1)

为了使迁移工具正常工作,我还必须添加Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet软件包。

答案 12 :(得分:0)

您有多个项目吗?如果是,则必须从Solution Explorer将宿主项目作为启动项目,并将该项目设置为PMC中的默认项目(该项目具有DBContext)。然后运行Add-Migration命令。

答案 13 :(得分:0)

与其说是解决方案,不如说是解决方法,我最终从解决方案中卸载了启动项目。运行迁移,将项目添加回解决方案。我不希望有很多迁移,所以它对我有用。让我感到困惑的是,我有一个具有类似功能的解决方案,但我没有遇到同样的问题。

答案 14 :(得分:0)

将具有实体的项目设置为“启动”项目,然后运行脚手架命令。它为我工作。不要忘了设置之后还原启动项目。

答案 15 :(得分:0)

首先安装“microsoft.entityframeworkcore.design”最好使用 Package Manager Console 中的 nuget 安装它,命令是:Install-Package Microsoft.EntityFrameworkCore.Design -Version x.x.x nuget 包的链接是 this link

然后在安装所需的DLL后重建解决方案,之后可能需要安装其他依赖项,但至少您将完成“microsoft.entityframeworkcore.design”依赖项

答案 16 :(得分:0)

对于安装 EF Core Design 时遇到此问题的任何人,我只需卸载并重新加载项目即可解决问题。

在解决方案资源管理器中右键单击该项目,卸载该项目,然后再次右键单击以重新加载。

现在它应该可以识别 Entity Framework Core Design。

答案 17 :(得分:0)

如果要进行迁移而不在服务中添加EF引用,则具有数据访问权限的库需要一种构造DbContext实例的方法。您可以通过实现IDesignTimeDbContextFactory来实现此目的,例如:

public class MyContextFactory : IDesignTimeDbContextFactory<MyContext>
{
    public MyContext CreateDbContext(string[] args)
    {
        var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
        optionsBuilder.UseSqlServer("Data Source=MyDatabase");

        return new MyContext(optionsBuilder.Options);
    }
}

答案 18 :(得分:0)

当我删除 .csproj 应用程序中的 PrivateAssets 时它对我有用

答案 19 :(得分:0)

为我解决的是使用相同版本的 Microsoft.EntityFrameworkCore.DesignMicrosoft.EntityFrameworkCore.SqlServer packages,在我的情况下是 2.1.14

编辑1:这是使用

解决的
<Project Sdk="Microsoft.NET.Sdk.Web">

<TargetFramework>net5.0</TargetFramework>

答案 20 :(得分:0)

出现此错误的另一个原因(即使您更改了 PrivateAssets) - 如果您的启动项目未引用到数据访问项目。因此,如果您刚刚创建了新项目,则可能是这种情况

答案 21 :(得分:0)

尝试将您的Web项目再次设置为启动项目,此警告应消失。 (右键单击Web项目>设置为启动项目)