添加迁移导致“无法加载程序集”错误

Posted

技术标签:

【中文标题】添加迁移导致“无法加载程序集”错误【英文标题】:add-migration causing a "Could not load assembly" error 【发布时间】:2013-05-16 17:38:20 【问题描述】:

这就是我在看的东西

PM> Add-Migration AddedSubdivion -StartUpProjectName Data -Verbose
Using StartUp project 'Data'.
Using NuGet project 'Registry'.
Could not load assembly 'Registry'. (If you are using Code First Migrations inside 
Visual Studio this can happen if the startUp project for your solution does not 
reference the project that contains your migrations. You can either change the startUp 
project for your solution or use the -StartUpProjectName parameter.)

我不知道它为什么要引用Registry 项目。 Registry 取决于 Data,而不是相反。我对此很陌生,所以我很感激任何帮助。

【问题讨论】:

Registry如何依赖Data,Data成为启动项目? 注册表是我的主要项目,数据只包含我所有的模型类。我选择哪个启动项目都没有关系,在这两种情况下都会出错。 谷歌员工在这里。 +1 提及启动项目。这很重要。 【参考方案1】:

这很尴尬,但也许这会对未来的谷歌用户有所帮助。

在“包管理器控制台”的顶部,我的默认项目被设置为错误的项目。将其更改为我的模型项目修复了它。

【讨论】:

谢谢!!!这给我带来了不同的问题。我得到了可怕的更新迁移。这解决了它。 谢谢。真是尴尬-_- 这里也一样。尽管我最初认为从解决方案资源管理器更改启动项目就足够了,但这个答案确实起到了作用。谢谢! 嗯......我收到了这个错误......我用谷歌搜索了它......我到了......谢谢!!! 对 EF Core 迁移仍然有效!【参考方案2】:

这也可能是由 .NET Core 和您的项目之间的平台不匹配造成的。你得到错误:

无法加载程序集“DataProject”。确保它被启动项目“ProgramProject”引用。

即使您指定了正确的项目和启动项目名称。 (通过使用 VS 和 Package Manager Console 中的下拉框,或使用 -project-startupproject 参数。)

您可以通过切换到任何 CPU 而不是 x86 来修复它,反之亦然(或者可能切换到 x64 等),但是每次需要对模型进行更改时,您都必须来回切换/数据库。

根据this answer,您可以通过更改系统环境变量中的 .NET Core 路径条目的顺序来解决此问题。如果您收到此错误,则表示第一个 .NET Core 路径适用于 x64,但您正在尝试对 x86 项目进行更改,或者可能以其他方式进行更改。将您定位的那个移到您没有定位的那个上方,保存,然后重新启动 Visual Studio。

您可以通过命令dotnet --info 查看当前正在使用哪一个。

(请注意,这假设您已经安装了两者。您也可能只安装了其中一个,在这种情况下,您需要安装另一个,然后检查 PATH 条目的顺序;如果第二个你安装的就是你想要的,那么你肯定需要改变PATH的顺序,让它成为VS使用的那个,因为它的入口应该在底部。)

【讨论】:

当我将 .net 核心项目设置为启动项目时,问题已解决【参考方案3】:

如果您将Package Manager Console 停靠在一个狭窄的窗口...隐藏默认项目,则问题可能不会那么明显。

它需要一个广泛的对接。

【讨论】:

【参考方案4】:

确保您专注于:

1- 启动项目是 UI(MVC、API 等)。

2- 包管理器控制台中的默认项目位于 (ApplicationDbContext)。

【讨论】:

【参考方案5】:

如果全部失败,则始终有 verbose 标志 (-v)。

dotnet ef database update -v 这样的命令应该有助于澄清ef 面临的问题。

就我而言,问题源于 EntityFramework 发现我的平台目标已从 AnyCPU 更改为 x86x64 的事实难以处理。

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.

暂时将平台目标更改为AnyCPU 效果很好。

【讨论】:

【参考方案6】:

我遇到了这个确切的问题,结果是因为我在一个空白解决方案下创建了项目,然后分别添加了类库和 Web 应用程序,它没有启动项目。

【讨论】:

【参考方案7】:

我想补充一下,如果您使用的是 .net6 预览版,则需要更新软件包。

因此您需要使用预览版 EntityFrameworkCore.Tools 和 EntityFrameworkCore.SqlServer(截至今天为 6.0.0-rc-1.21452.10 版本)

【讨论】:

【参考方案8】:

如果您有 N-Tier 设计您的项目并想使用 CLI,那么您将在 CLI 上在根项目文件夹中运行此命令。之后,迁移文件将在数据访问层中创建。

如果没有dotnet-ef工具,请先安装后再运行脚本。

安装脚本:

dotnet tool install --global dotnet-ef

迁移脚本:

dotnet ef migrations add migrationName --project YourDataAccessProjectPath -o Migrations --startup-project YourApiProjectPath

【讨论】:

你能举个例子吗?我有 N 层设计,其中一个是 AuthServer.API,另一个是 MiniApp1.API,我的数据访问是 MiniApp1.Data。我应该这样填写句子:dotnet ef migrations add initial --project application/MiniApp1.Data -o Migrations --startup-project services/MiniApp1.API @mryunus 是的,没错。此命令的重要部分“应用程序/”和“服务/”我的图层文件夹。如果所有层的路径都相同,则可以将其删除。 这不能正常工作,因为它会导致YourDataAccess和YourApi项目都需要相互引用的循环依赖问题 我们使用了这个命令,如果你有任何错误可以分享给我们吗?我的项目依赖项按 API 顺序排列。 API => 应用层 => 数据访问层(底层)。

以上是关于添加迁移导致“无法加载程序集”错误的主要内容,如果未能解决你的问题,请参考以下文章

无法加载程序集XXX.dll 此程序集可能是从 Web 上下载的

加载程序集时Xamarin Android异常:System.IO.FileNotFoundException:无法加载程序集'Xamarin.Android.Support.Compat&#

ASP.NET Core MVC 项目无法加载程序集

CreateInstanceAndUnwrap 无法加载程序集

Azure 应用服务无法访问文件,因此甚至无法加载程序集

无法加载程序集...确保它被启动项目引用