Your startup project doesn't reference Microsoft.EntityFrameworkCore.Design
Asked Answered
O

31

123

I have 2 projects in my solution, I have a project with Entity Framework Core installed:

enter image description here

And in the other ASP.NET Web API project I have these packages:

<?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>

When I run Add-Migration in PMC:

Your startup project 'API' doesn't reference Microsoft.EntityFrameworkCore.Design. This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.

I installed Microsoft.EntityFrameworkCore.Design in the startup project instead of the data project that will contain all the entities and now it works, is this how the project should be setup?

Ovenbird answered 27/9, 2018 at 12:3 Comment(10)
If your DB context project is not the same as entry project you need to add entry project location when adding migration, e.g. dotnet ef migrations add initialMigration -s ../MainProjectLocation/ --context MyDbContext.Zerlina
Do you have multiple projects? If yes then you have to make the host project as startup project and set the project as default (which project has DBContext) in PMCCheddar
@Zerlina I'm not using dotnet ef, I'm using Microsoft.EntityFrameworkCoreOvenbird
@CodeCaster should I install all packages in the startup project? Why does it want the design package installed in the startup project?Ovenbird
You need Microsoft.EntityFrameworkCore.Tools for running PM-Console commands, but the specific packages like Microsoft.EntityFrameworkCore.Design was necessary for Microsoft.EntityFrameworkCore.Tools to work, I think it was normal for it, anyway, you have resolved this issue.Maurilla
@Ovenbird I got the exact same message on my project. Following the instructions on the message, I ran Install-Package Microsoft.EntityFrameworkCore.Design in the PM Console and everything started working fine.Proboscidean
So much misinformation in this thread, save yourself the trouble and remove <PrivateAssets>all</PrivateAssets> from the package reference in the .csproj file from Microsoft.EntityFrameworkCore.Design for your infrastructure project.Staphyloplasty
Removing<PrivateAssets>all</PrivateAssets> is most definitely not the right solution to this! You don't want Microsoft.EntityFrameworkCore.Design to get published along with your code (see this link for details). To fix this, make sure you set the project containing your db context as both the default and start up project in your Package Manager Console and make sure you override your OnConfiguring method in your db context so a default connection string is supplied.Volumed
I simply had to do a Rebuild All (Ctrl+Shift+B)Aciniform
Try this solution worked for me hereFennell
G
109

I found the solution here.

In short, edit your csproj file, and add to your PropertyGroup section the following entry:

<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>
Geraldgeralda answered 1/10, 2019 at 13:9 Comment(0)
W
77

None of the options worked for me. But the one I tried on this topic worked: EF Core 3 design time migrations broken by Microsoft.EntityFrameworkCore.Design DevelopmentDependency

I just commented out the following after importing the package to the Data project:

<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>

Thank you so much Microsoft by breaking the existing projects every time when you release a new .NetCore update!

Weakly answered 30/6, 2020 at 18:26 Comment(5)
I replaced "all" with "none" instead which I think is more appropriate, but the answer helped me find the solution, thanks! Here is some more info for anyone who wana investigate further how PrivateAssets work: learn.microsoft.com/en-us/dotnet/core/tools/csprojBlinker
Thanks, this resolved it for me too! Here's a related issue on github: github.com/dotnet/Scaffolding/issues/711Miru
Hahaha, I'm using this answer for the third time... Thank you!Tericaterina
Thanks for this answer. I faced this problem in my .net core 5 web app. I commented PrivateAssets tags in class_lib.csproj file. After that it worked.Cajun
The reason for the <IncludeAssets> and <PrivateAssets> being added is that the assemblies of the designer tools should not be deployed but might still needed in testing hence they can't be declared as development packages.Shinberg
I
53

"Your 'project name' does not refer to your startup project Microsoft.EntityFrameworkCore.Design. This package is required for the Entity Framework Core Tools to work. Make sure your startup project is correct, install the package and try again."

If you get this error, try 'Build > Clean Solution' in your project and then try running your command again.

This worked in my project. Or you may want to look at the documentation.

I use .Net Core 3.1 version in my project.

Isaak answered 18/3, 2020 at 11:16 Comment(3)
Again, doing this isn't a solution. It just ends up adding EF assemblies into a startup project that should be entirely separate from the infrastructure (separation of concerns). This is the correct answer which removes the <PrivateAssets>all</PrivateAssets> in the infrastructure assembly .csproj file.Staphyloplasty
I have not done anything mentioned in other answers, just Cleaning the solution and the main project is using .net core 3.1. It worked for me.Courser
This didn't solve the issue for me. The error still occurs.Preamplifier
C
34

Do you have multiple projects? If yes then you have to make the host project a startup project from solution explorer and set the project as default (which project has DBContext) in PMC. Then run the Add-Migration command.

Package Manager Console screenshot:

enter image description here

Cheddar answered 27/9, 2018 at 18:2 Comment(6)
Thank you, that worked for me. What I would like to know is why this is necessary even when I am running the Add-Migration command from the package manager console with the right project selected as target.Rhizobium
@Rhizobium please check this link https://mcmap.net/q/182294/-nuget-package-manager-console-default-project-dropdown-is-emptyCheddar
@viveknuna What exactly do you mean 'set the project as default in PMC'?Nazarite
@viveknuna I was just curious, I use CMD/Bash only, not powershell. I have no idea if your solution works. I upvoted your comment. None of the solutions found on stackoverflow for multi project (database design in one project, usage of database design in another) worked for me - I also need to setup devops pipeline for automatic deployment of migrations.Nazarite
This solution worked for my where I had EF related code in a separate class library.Dayak
Did that together with cleaning solution and it works as a charm, thank you!Dragonroot
B
27

Please make sure You have installed below packages. I was also getting same error and Installed below packages and it worked for me.

Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Tools
Bullyboy answered 1/4, 2020 at 19:40 Comment(4)
Thank you, this worked for me: 'dotnet add package Microsoft.EntityFrameworkCore.Design' source learn.microsoft.com/en-us/ef/core/get-started/installBrushwood
Again, doing this isn't a solution. It just ends up adding EF assemblies into a startup project that should be entirely separate from the infrastructure (separation of concerns). This is the correct answer which removes the <PrivateAssets>all</PrivateAssets> in the infrastructure assembly .csproj file.Staphyloplasty
what about Microsoft.EntityFrameworkCore, is that required also ?Poussette
This worked for me with .NET 8.Quarters
N
12

I got this error because Visual Studio defaulted to using entity framework core rather than old-school entityframework for .NET Framework: entity framework 6. This was my solution:

EntityFramework\Update-Database

Or reference the version explicitly:

EntityFramework6\Update-Database

Also worth checking the right project is selected in the Package Manager Console. That likes to sneak back to other projects half the time!

Nitty answered 16/10, 2019 at 20:42 Comment(3)
I just want to add if you are using EF 6 the correct command is: EntityFramework6\Add-Migration, that solve the problem for me. Thanks.Pentahedron
At witch place can you run this command? CMD does not know EntityFramework as commandSarita
@Sarita Package Manager console in Visual Studio.Nitty
N
11

There is absolutely NO reason to install Microsoft.EntityFrameworkCore.Design to your API project while having a separate Data project.

Quick solution

When using add-migration, just add a parameter to set the -StartUpProject to your Data proj (by default I presume your startup project is the API proj).


Example add-migration command below:

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

Example update-database command below:

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

I hope this help you guys

PS: more info about the add-migration params can be found here

Neurologist answered 19/1, 2021 at 13:38 Comment(2)
Do you know how to write the same commands in CMD, ie. detnet ef ....?Nazarite
@Nazarite sure, here are the ones I used. They may differ slightly depending on your setup; add-migration: dotnet ef migrations add {migration_name} --startup-project {your_data_proj_name} --project {your_data_proj_name}, update-database: dotnet ef database update --startup-project {your_data_proj_name} --project {your_data_proj_name}Orbit
B
7

You could solve this by using below commands

dotnet tool install --global dotnet-ef
dotnet add package Microsoft.EntityFrameworkCore.Design
Bain answered 27/8, 2020 at 9:58 Comment(1)
Adding the package doesn't help keep the EF assembly separate, which is entirely possible the issue is the use of <PrivateAssets>all</PrivateAssets> in the csproj is hiding the assembly from being accessed by the startup project.Staphyloplasty
T
7

It works for me when i deleted Private Assets in .csproj or

EFCore.Design

Not making the private assets property all through the properties of the package

Titre answered 4/8, 2021 at 8:18 Comment(1)
Worked for me. However, the Nuget package has now this yellow triangle, as something is not right. I'm wondering why is that. It's not a big deal but it bothers me a bit.Switzer
C
6

Try to set your web project again as startup project and this warning should go. (Right click on web project > Set as startUp project)

Carpentaria answered 12/2, 2019 at 16:42 Comment(0)
C
6

If you want to do migrations without adding EF references in your services, your library with data access needs a way to construct an instance of your DbContext. You can do this by implementing IDesignTimeDbContextFactory, example:

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);
    }
}
Coquet answered 19/2, 2020 at 12:45 Comment(0)
I
2

Set the project with entities as the Startup project and run the scaffolding command. it worked for me. Don't forget to revert the startup project after.

Impresa answered 31/3, 2020 at 4:17 Comment(1)
Funny Microsoft bug as usual. Setting the project as startup project in the solution resolve the isssue. Thank you @ImpresaHomomorphism
R
2

This happen for me when

Both Entity Framework Core and Entity Framework 6 are installed. The Entity Framework Core tools are running. Use 'EntityFramework6\Add-Migration' for Entity Framework 6.

solution was EntityFrameworkCore\Add-Migration

Racism answered 5/6, 2020 at 11:29 Comment(0)
M
2

I had the same issue while I had more than one project in the solution. the mistake I was doing was I had not selected the concerned project as the Default project in Package Manager Console. So check if you have selected the same project as default in Package Manager Console in which you want to run migration command.

Muskrat answered 8/7, 2020 at 13:0 Comment(0)
G
2

I had this same problem and I found out that the cause was that I installed Misoft.EntityFrameworkCore, Misoft.EntityFrameworkCore.SqlServer and Misoft.EntityFrameworkCore.Tools all in my Data Layer (in one project), remember we have multiple projects (Multiple Tier), and i set one of the projects as the StartUp. So my solution was to uninstall Misoft.EntityFrameworkCore.SqlServer and Misoft.EntityFrameworkCore.Tools from the Data layer (that is the project where I have my DbContext) and install them (Misoft.EntityFrameworkCore.SqlServer and Misoft.EntityFrameworkCore.Tools) in the Dependencies of StartUp project.

HOW TO INSTALL Right click on the Dependencies in the StartUp project, select: Manage NuGet Packages.. Click install and search the above two packages.

Projects in the Application Image of how it should look after following the below steps

Glassman answered 25/3, 2022 at 15:43 Comment(1)
I had the same issue, 2 projects One Web API and the other containing Data and EF. Your solution helped me to solve this issueKerwon
M
2

In my case I had multiple projects set to start up, once I set it to a single project the Add-Migration command worked:

enter image description here

And:

enter image description here

Musicology answered 11/10, 2022 at 12:54 Comment(0)
L
2

If you have these packages

  1. Microsoft.EntityFrameworkCore.
  2. Microsoft.EntityFrameworkCore.Tools
  3. Microsoft.EntityFrameworkCore.SqlServer
  4. Microsoft.EntityFrameworkCore.

Set your web project as 'Startup' then open in Visual Studio toolbar Tools > Nuget Package Manager > Console run this commands in order

EntityFrameworkCore\Enable-Migrations
EntityFrameworkCore\add-migration migration-name
EntityFrameworkCore\update-database

that means you will use EntityFrameworkCore to add migrations.

Luckless answered 9/5, 2023 at 11:14 Comment(0)
D
1

In order for the migration tool to work, I had to add the Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet package as well.

Digitalin answered 31/5, 2020 at 11:42 Comment(0)
E
1

More a workaround than a solution, I ended up unloading the startup project from the solution. Ran the migration, added the project back to the solution. I don't expect to have many migrations, so it worked for me. What baffles me is that I have a solution with similar features and I didn't have the same issue.

Erythropoiesis answered 21/12, 2020 at 17:1 Comment(0)
Q
1

Another cause of this is simply I was completely missing the package Microsoft.EntityFrameworkCore.Tools package, which became uninstalled somehow.

It's worth noting that the error I got for this was similar but different and was "Your target project 'XXX' doesn't reference EntityFramework. This package is required for the Entity Framework Core Tools to work. Ensure your target project is correct, install the package, and try again."

Installing it got me back on track.

Quarters answered 26/9, 2021 at 7:42 Comment(1)
How did you install it? I'm unbeliavably stuck in this step.Kirbee
L
1

To get rid of the need of having dependency on Microsoft.EntityFrameworkCore.Design at all in your .NET project, you can use efmig.

You'll have to specify desired version of Microsoft.EntityFrameworkCore.Design in configuration profile but it's never added to your project which results in less dependencies.

efmig main window

Configuration window: enter image description here

Disclaimer: I'm the author, the project is open source and I've been using it at my daily work for long time now.

Lattie answered 10/12, 2023 at 21:25 Comment(0)
H
0

First install the "microsoft.entityframeworkcore.design" better to install it using the nuget from the Package Manager Console and the command is: Install-Package Microsoft.EntityFrameworkCore.Design -Version x.x.x the link to the nuget package is this link

Then rebuild the solution after installing the required DLL, you might need to install other dependencies after that, but at least you will be done with the "microsoft.entityframeworkcore.design" dependency

Hyonhyoscine answered 11/2, 2021 at 10:13 Comment(0)
S
0

Please make sure you have installed the same version of the packages below:

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

I was also getting the same error and re-installed the packages with the same version and it worked for me.

Sfumato answered 19/4, 2021 at 10:13 Comment(0)
S
0

What solved it for me was to have the same version of Microsoft.EntityFrameworkCore.Design and Microsoft.EntityFrameworkCore.SqlServer packages, which in my case was 2.1.14

Edit 1: This was solved using a

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

on

<TargetFramework>net5.0</TargetFramework>
Socle answered 6/7, 2021 at 16:16 Comment(0)
N
0

There is one more reason to get this error (even if you changed PrivateAssets) - if your startup project is not referenced to data access project. So if you just created new projects it can be possible case

Norvol answered 6/7, 2021 at 18:43 Comment(0)
C
0

I installed MySql.EntityFrameworkCore to use MySQL with Entity Framework, but I encountered this error. I attempted to fix the issue by installing various packages, but eventually realized that the only necessary package was Microsoft.EntityFrameworkCore.Tools.

After installing "EntityFrameworkCore.Tools" through the Nuget interface, it is important to save changes by pressing "Ctr + Shift + S" to apply them, otherwise the solution may not work correctly.

Cacomistle answered 12/4, 2023 at 16:46 Comment(0)
B
0

This issue occurred randomly and none of the other solutions resolved it. Deleting the bin, obj, and root .VS folder, temp directory, and restarting VS worked for me.

To clean temp directory:

rd /Q /S "%localappdata%\temp"
Birkett answered 18/7, 2023 at 17:28 Comment(0)
L
0

If you encounter migration errors in an Entity Framework Core application with multiple projects, you can resolve them by specifying the projects involved during migration. Here's the command you can use:

dotnet ef migrations add MyMigration -p <relative-path-to-DbContext-project> -s <relative-path-to-startup-project>
Lactescent answered 8/9, 2023 at 4:24 Comment(0)
B
0

Your web project should Set as startup project

and in the package manager console, select the project in which you want the migration to be saved in the default project section.

Bacteriolysis answered 12/10, 2023 at 7:17 Comment(0)
O
0

If you have two project or you have a project with separate library that contains the database access, so:

  1. install the following packages on the library:

    Microsoft.EntityFrameworkCore.SqlServer.

    Microsoft.EntityFrameworkCore.Design.

    Microsoft.EntityFrameworkCore.Tools.

  2. Then install the Microsoft.EntityFrameworkCore.Design on your project.

Octodecimo answered 2/1, 2024 at 8:9 Comment(0)
T
0

I was able to resolve this by enabling Multiple Startup Project for the Solution.

In Visual Studio, in the Solution Explorer window right click on the solution and click Properties.

Select the Startup Project tab and select the Multiple startup projects option. Change the action of the projects from None to Start in particular you'll want to set the project that references Microsoft.EntityFrameworkCore.Design to be set to Start.

Click Apply and OK and run the solution

see demo here

Theft answered 26/3, 2024 at 14:20 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Jaquesdalcroze

© 2022 - 2025 — McMap. All rights reserved.