add-migration causing a "Could not load assembly" error

If all fails there's always the verbose flag (-v).

A command like dotnet ef database update -v should help clarify the problem ef is facing.

In my case, the issue stemmed from EntityFramework finding it difficult to deal with the fact that my platform target was changed from AnyCPU to x86 or x64.

System.BadImageFormatException: Could not load file or assembly 'MyProject, Culture=neutral, PublicKeyToken=null'. An attempt was made to load a program with an incorrect format.

Temporarily changing the platform target to AnyCPU worked just fine.


The problem might not be so obvious if you have Package Manager Console docked with a narrow window...hiding the default project. enter image description here

Its needs a wide docking. enter image description here


This is embarrassing, but maybe this will help out a googler in the future.

At the top of the "Package Manager Console" my default project was set to the wrong project. Changing that to my models project fixed it.

enter image description here


This can also be caused by a platform mismatch between .NET Core and your project. You get the error:

Could not load assembly 'DataProject'. Ensure it is referenced by the startup project 'ProgramProject'.

even though you have specified correct project and startup project names. (Either by using the drop down boxes in VS and the Package Manager Console, or by using the -project and -startupproject parameters.)

You can fix it by switching to Any CPU instead of x86, or vice-versa (or maybe to x64, etc.), but then you will have to switch back and forth every time you need to make changes to your model/DB.

As per this answer you can fix this by changing the order of your .NET Core path entries in system environment variables. If you're getting this error, then it means that either the first .NET Core path is for x64 but you're trying to make changes to your x86 project, or possibly other way around. Move the one you're targeting above the one you're not targeting, save, and then restart Visual Studio.

You can see which one is currently being used with the command dotnet --info.

(Note that this assumes you've installed both. You may also only have one of them installed, in which case you'd need to install the other one, and then check the order of the PATH entries; if the second one you installed is the one you want, then you will definitely need to change the PATH order to make it the one used by VS, since its entry should be at the bottom.)