Could not load assembly Microsoft.EntityFrameworkCore.Design when running Add-Migration
Asked Answered
V

4

5

I have created a Class Library project with the following .csproj:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.sqlserver.Design" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" />
  </ItemGroup>

</Project>

When running the command:

Add-Migration -Name Test -Context TestContext

I am getting the following error:

System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.EntityFrameworkCore.Design, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
File name: 'Microsoft.EntityFrameworkCore.Design, Culture=neutral, PublicKeyToken=null'
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks, IntPtr ptrLoadContextBinder)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks, IntPtr ptrLoadContextBinder)
   at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
   at Microsoft.EntityFrameworkCore.Tools.ReflectionOperationExecutor..ctor(String assembly, String startupAssembly, String projectDir, String contentRootPath, String dataDirectory, String rootNamespace, String environment)
   at Microsoft.EntityFrameworkCore.Tools.Commands.ProjectCommandBase.CreateExecutor()
   at Microsoft.EntityFrameworkCore.Tools.Commands.MigrationsAddCommand.Execute()
   at Microsoft.DotNet.Cli.CommandLine.CommandLineApplication.Execute(String[] args)
   at Microsoft.EntityFrameworkCore.Tools.Program.Main(String[] args)
Could not load file or assembly 'Microsoft.EntityFrameworkCore.Design, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.

However Microsoft.EntityFrameworkCore.Design is already installed.

I am using Visual Studio Community 2017 (VisualStudio/15.0.0+26228.9)

What am I missing?

Velocity answered 27/3, 2017 at 17:39 Comment(0)
V
12

It worked after adding Microsoft.EntityFrameworkCore.Tools.DotNet and changing the versions of dotnet tools to 1.0.0-msbuild2-final, now my .csproj is:

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

  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.sqlserver.Design" Version="1.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.0.0-msbuild2-final" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0-msbuild2-final" />
  </ItemGroup>

</Project>
Velocity answered 27/3, 2017 at 18:44 Comment(2)
This works, but it's concerning as to why this is a requirement.Translucid
EFCore is not supposed to require .NET Core, but "Microsoft.EntityFrameworkCore.Tools.DotNet" requires .NET Core. Sigh.Variola
R
5

for me, it worked fine after setting the start up project to the class library also you can do it without setting the start up project by using the command

Add-Migration -project [ProjectName] initDB

also here is my .csproj for reference

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.1" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore" Version="1.1.2" />  
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
</ItemGroup>


</Project>
Refection answered 14/5, 2017 at 2:31 Comment(2)
Wow. Who'd have thought setting the startup project to a class library would fix this! Solved my problem, even though I had the class library selected in packager manager console!Jijib
Worked for me after setting the startup project.Afforest
A
0

I followed instructions from Bart Lannoeye:

UWP apps can’t run in the AnyCPU configuration I chanbged my project to run in x86 and migrations started to work.

http://www.bartlannoeye.com/blog/ef-core-migrations-throws-exception-calling-createinstanceandunwrap

Aboveboard answered 28/5, 2017 at 0:43 Comment(0)
O
0

My issue was a specific version of Visual Studio (15.4.5) failing to read the IDE settings. From this workaround from Ben Day I explicitly set the setup project and Migrations project on the command line.

These two commands were formatted in this manner to make it work.

PM> cd [migrations directory]
PM> Add-Migration -Name [version label] -Context [your context] -s [startup project]
Oruro answered 29/1, 2018 at 18:40 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.