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

Posted

技术标签:

【中文标题】您的启动项目未引用 Microsoft.EntityFrameworkCore.Design【英文标题】:Your startup project doesn't reference Microsoft.EntityFrameworkCore.Design 【发布时间】:2019-03-03 08:16:47 【问题描述】:

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

在另一个 ASP.NET Web API 项目中,我有这些包:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.5.0.2" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.Web" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.WindowsServer" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.5.1" targetFramework="net461" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.Razor" version="3.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.0" targetFramework="net461" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.4" targetFramework="net461" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.4" targetFramework="net461" />
  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.0" targetFramework="net461" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" />
  <package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
  <package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net461" />
  <package id="WebGrease" version="1.6.0" targetFramework="net461" />
</packages>

当我在 PMC 中运行 Add-Migration 时:

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

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

【问题讨论】:

如果你的数据库上下文项目与入口项目不同,你需要在添加迁移时添加入口项目位置,例如dotnet ef migrations add initialMigration -s ../MainProjectLocation/ --context MyDbContext. 你有多个项目吗?如果是,那么您必须将宿主项目设置为启动项目并在 PMC 中将项目设置为默认项目(哪个项目具有 DBContext) @milan 我没有使用 dotnet ef,我使用的是 Microsoft.EntityFrameworkCore 你需要 Microsoft.EntityFrameworkCore.Tools 来运行 PM-Console 命令,但是像 Microsoft.EntityFrameworkCore.Design 这样的特定包是 Microsoft.EntityFrameworkCore.Tools 工作所必需的,我认为这很正常,无论如何,你已经解决了这个问题。 这个线程中有这么多错误信息,省去你的麻烦,并从.csproj 文件中的包引用中删除&lt;PrivateAssets&gt;all&lt;/PrivateAssets&gt;,从Microsoft.EntityFrameworkCore.Design 为您的基础设施项目。 【参考方案1】:

我找到了解决方案here。

简而言之,编辑您的 csproj 文件,并将以下条目添加到您的 PropertyGroup 部分:

<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>

【讨论】:

这对我有用。请注意,如果您有多个项目,则应将其放置在您引用实体框架的项目中。您可能需要从某些包引用中删除 &lt;PrivateAssets&gt;all&lt;/PrivateAssets&gt;(我已从 &lt;PackageReference Include="Microsoft.EntityFrameworkCore.Design"&lt;PackageReference Include="Microsoft.EntityFrameworkCore.Tools" 中删除 感谢@RenatoMedeiros,从设计项目中删除 PrivateAsserts = all 解决了这个问题。我什至不需要 GenerateRuntimeConfigurationFiles 设置! @RenatoMedeiros 您需要将其发布为答案,因为它帮助我解决了我的问题! 对我来说也一样,只需删除 all 就可以了!【参考方案2】:

没有一个选项对我有用。但是我在这个主题上尝试过的那个有效: 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 更新时都会中断现有项目!

【讨论】:

这也对我有用。然而,这样做的进一步后果是什么? 我正在使用 efcore 是一个单独项目的解决方案,您的回答对我有用 我将“all”替换为“none”,我认为这更合适,但答案帮助我找到了解决方案,谢谢!对于想要进一步调查 PrivateAssets 如何工作的任何人,这里有一些更多信息:docs.microsoft.com/en-us/dotnet/core/tools/csproj 谢谢,这也为我解决了!这是github上的一个相关问题:github.com/dotnet/Scaffolding/issues/711 GenerateRuntimeConfigurationFiles 标签没有解决我的问题,但这对我有用。【参考方案3】:

“您的“项目名称”未引用您的启动项目 Microsoft.EntityFrameworkCore.Design。Entity Framework Core Tools 工作需要此包。确保您的启动项目正确,安装包并重试。 "

如果您收到此错误,请在您的项目中尝试 'Build > Clean Solution',然后再次尝试运行您的命令。

这在我的项目中有效。或者你可能想看看documentation。

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

【讨论】:

再说一次,这样做不是解决方案。它只是最终将 EF 程序集添加到应该与基础架构完全分离的启动项目中(关注点分离)。 This is the correct answer 删除基础结构程序集 .csproj 文件中的 &lt;PrivateAssets&gt;all&lt;/PrivateAssets&gt; 我没有做其他答案中提到的任何事情,只是清理解决方案,主要项目使用.net core 3.1。它对我有用。【参考方案4】:

您有多个项目吗?如果是,那么您必须从解决方案资源管理器中将宿主项目设置为启动项目,并在 PMC 中将项目设置为默认项目(哪个项目具有 DBContext)。然后运行Add-Migration 命令。

【讨论】:

谢谢,这对我有用。我想知道的是,为什么即使我从包管理器控制台运行 Add-Migration 命令并选择正确的项目作为目标,这也是必要的。 @Nicole 请检查此链接***.com/a/12031921/6527049【参考方案5】:

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

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

【讨论】:

谢谢,这对我有用:'dotnet add package Microsoft.EntityFrameworkCore.Design' source docs.microsoft.com/en-us/ef/core/get-started/install 再说一次,这样做不是解决方案。它只是最终将 EF 程序集添加到应该与基础架构完全分离的启动项目中(关注点分离)。 This is the correct answer 删除基础结构程序集 .csproj 文件中的 &lt;PrivateAssets&gt;all&lt;/PrivateAssets&gt; Microsoft.EntityFrameworkCore 怎么样,也需要吗?【参考方案6】:

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

EntityFramework\Update-Database

或明确引用版本:

EntityFramework6\Update-Database

在包管理器控制台中选择正确的项目也值得检查。那喜欢偷偷溜回其他项目!

【讨论】:

我只想添加,如果您使用的是 EF 6,正确的命令是:EntityFramework6\Add-Migration,它为我解决了问题。谢谢。 在女巫的地方可以运行这个命令吗? CMD 不知道 EntityFramework 作为命令 @Andre 包管理器控制台在 Visual Studio 中。【参考方案7】:

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

【讨论】:

【参考方案8】:

如果您想在不向服务中添加 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);
    

【讨论】:

【参考方案9】:

绝对没有理由将 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

【讨论】:

【参考方案10】:

这发生在我身上

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

解决方案是EntityFrameworkCore\Add-Migration

【讨论】:

【参考方案11】:

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

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

【讨论】:

添加包并不能帮助保持 EF 程序集独立,这完全有可能是问题是在 csproj 中使用 &lt;PrivateAssets&gt;all&lt;/PrivateAssets&gt; 正在隐藏程序集以防止启动项目访问.【参考方案12】:

当我在 .csproj 或

中删除 Private Assets 时,它对我有用

不通过包的属性制作私有资产属性all

【讨论】:

为我工作。但是,Nuget 包现在有这个黄色三角形,因为有些地方不对劲。我想知道为什么会这样。这没什么大不了的,但它有点困扰我。【参考方案13】:

单击启动项目名称并将其删除:

<PrivateAssets>all</PrivateAssets> 

来自包参考Microsoft.EntityFrameworkCore.Design

【讨论】:

【参考方案14】:

我在解决方案中有多个项目时遇到了同样的问题。我犯的错误是我没有在包管理器控制台中选择相关项目作为默认项目。因此,请检查您是否在要运行迁移命令的包管理器控制台中选择了与默认项目相同的项目。

【讨论】:

【参考方案15】:

将带有实体的项目设置为启动项目并运行脚手架命令。它对我有用。之后别忘了恢复启动项目。

【讨论】:

像往常一样有趣的微软错误。在解决方案中将项目设置为启动项目解决了该问题。谢谢@Shivanka【参考方案16】:

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

【讨论】:

【参考方案17】:

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

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

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

【讨论】:

【参考方案18】:

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

【讨论】:

【参考方案19】:

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

【讨论】:

【参考方案20】:

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

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

【讨论】:

【参考方案21】:

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

    Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Design

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

【讨论】:

【参考方案22】:

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

【讨论】:

【参考方案23】:

为我解决的问题是拥有相同版本的 Microsoft.EntityFrameworkCore.DesignMicrosoft.EntityFrameworkCore.SqlServer packages,在我的情况下是 2.1.14

编辑 1:这是使用 a 解决的

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

<TargetFramework>net5.0</TargetFramework>

【讨论】:

【参考方案24】:

你需要安装微软EntityFrameworkCore的设计包。 运行这个命令

dotnet 添加包 Microsoft.EntityFrameworkCore.Design

这将在 .csproj 文件中包含包

【讨论】:

【参考方案25】:

另一个原因是我完全错过了包Microsoft.EntityFrameworkCore.Tools 包,它以某种方式被卸载了。

值得注意的是,我得到的错误相似但不同,并且是“您的目标项目'XXX'没有引用 EntityFramework。Entity Framework Core Tools 工作需要此包。确保您的目标项目是正确,安装软件包,然后重试。”

安装它让我重回正轨。

【讨论】:

【参考方案26】:

只需删除所有并再次运行该命令对我有用

【讨论】:

以上是关于您的启动项目未引用 Microsoft.EntityFrameworkCore.Design的主要内容,如果未能解决你的问题,请参考以下文章

c# 不更新数据库

Visual Studio 2012 数据库项目中未解决的引用

从 Visual Studio 项目中的项目中删除所有未使用的引用

uniappcli启动不成功未报错

警告! ejabberd 无法启动 管理员用户未创建 请检查您的配置

访问未配置。您的项目未启用 API (Google+ API)。请使用 Google Developers Console 更新您的配置