Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Could not load assembly 'Name'. Ensure it is referenced by the startup project 'Name' #35356

Open
twojnarowski opened this issue Dec 19, 2024 · 3 comments

Comments

@twojnarowski
Copy link

twojnarowski commented Dec 19, 2024

File a bug

When setting a WinForms project with <PlatformTarget>x86</PlatformTarget> I cannot add a migration because of the following error: Could not load assembly 'EFCorex86MigrationFail'. Ensure it is referenced by the startup project 'EFCorex86MigrationFail'.. That happens when Context is in the startup project. When having a solution where Context is in a separate project, this error happens: System.IO.FileNotFoundException: Could not load file or assembly 'EFCorex86MigrationFail, Culture=neutral, PublicKeyToken=null'.

Include your code

Reproduction: https://github.com/twojnarowski/EFCorex86MigrationFail
Steps: Create WinForms app on .NET8, add 3 EF Core nugets - Design, Tools and SQLServer. Create a Context class. Run add-migration command - everything works. Change project settings to target platform x86, run add-migration, migration fails.

Include verbose output

Issue when Context in Startup Project:

PM> add-migration InitialMigration
Build started...
Build succeeded.
Could not load assembly 'EFCorex86MigrationFail'. Ensure it is referenced by the startup project 'EFCorex86MigrationFail'.

Issue when Context in a separate project:

PM> add-migration InitialMigration -context EFContext
Build started...
Build succeeded.
System.IO.FileNotFoundException: Could not load file or assembly 'EFCorex86MigrationFail, Culture=neutral, PublicKeyToken=null'. Nie można odnaleźć określonego pliku.
File name: 'EFCorex86MigrationFail, Culture=neutral, PublicKeyToken=null'
   at System.Reflection.RuntimeAssembly.InternalLoad(AssemblyName assemblyName, StackCrawlMark& stackMark, AssemblyLoadContext assemblyLoadContext, RuntimeAssembly requestingAssembly, Boolean throwOnFileNotFound)
   at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.get_StartupAssembly()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.get_MigrationsOperations()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType, String namespace)
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Could not load file or assembly 'EFCorex86MigrationFail, Culture=neutral, PublicKeyToken=null'. Nie można odnaleźć określonego pliku.

Include provider and version information

EF Core version: 8.0.11
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework: NET 8.0
Operating system: Windows 11
IDE: Visual Studio 2022 17.4

Workaround:

Set project back to Any CPU, create migration, update database. Return project back to x86, everything works.

@m1nh101
Copy link

m1nh101 commented Dec 20, 2024

Have you changed the default project in visual studio integrated console to the the project that include the context?

@ChrisJollyAU
Copy link
Contributor

I've seen this before. Simply put this is expected behaviour.

I am almost certain that the .Net SDK you have installed is the x64 version.

The thing is when you do the migration, .Net (usually dotnet.exe) needs to load your project so that it can call into it for the migrations and the database connection. However since the SDK is x64 and your project is x86 there is a mismatch and your project fails to load.

Obviously targeting x64 will work. Any CPU will work for whichever .Net you have (x64, x86 and possibly ARM).

Is there a particular need to specifically use x86? If so, it would be better to have the x86 .Net SDK installed and used as default

@twojnarowski
Copy link
Author

Have you changed the default project in visual studio integrated console to the the project that include the context?

@m1nh101 when running x64 everything works, so you can assume that I did that :)

Is there a particular need to specifically use x86? If so, it would be better to have the x86 .Net SDK installed and used as default

@ChrisJollyAU Yes, there is. I am referencing a dll API from this project and it only works in x86. But I haven't downloaded any specific .NET SDK apart from what VS Installer installed. I will try to download x86 SDK and try with it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants