【问题标题】:Can't Enable-Migrations. Throws System.BadImageFormatException: Could not load file or assembly无法启用-迁移。引发 System.BadImageFormatException:无法加载文件或程序集
【发布时间】:2013-06-01 15:47:35
【问题描述】:

我无法启用 EF 迁移!

使用包管理器控制台,它会抛出以下内容:

PM> Enable-Migrations System.BadImageFormatException: Could not load file or assembly 'MyApp' or one of its dependencies. Index not found. (Exception from HRESULT: 0x80131124) File name: 'MyApp' ---> System.BadImageFormatException: Index not found. (Exception from HRESULT: 0x80131124) at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) at System.Reflection.Assembly.Load(String assemblyString) at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.LoadAssembly() at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindType[TBase](String typeName, Func2 过滤器,Func2 noType, Func3 多个类型,Func3 noTypeWithName, Func3 多个类型与名称) 在 System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypeRunner.RunCore() 在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()

Could not load file or assembly 'MyApp' or one of its dependencies. Index not found. (Exception from HRESULT: 0x80131124)

还有:
1. 我的默认项目(在 PM CONSOLE 中)是“MyApp”
2.解决方案只有“MyApp”
3. 继承自 DbContext 的类在 'MyApp.Models'
4. 我也尝试创建一个新的解决方案,然后将所有类复制粘贴到它,它抛出了同样的错误

发生了什么?
过去我曾经在这个项目中启用了迁移,但两天后我删除了其中的所有迁移内容,因为它不是必需的。但现在我真的很需要它们

【问题讨论】:

  • 如果您删除了所有迁移类,您是否删除了 __MigrationHistory 表中的记录。尝试使用一个干净的新数据库,看看问题是否仍然存在。很可能您已经删除了代码库中的所有迁移,但您的数据库仍然有更早的记录
  • 我已经多次删除数据库并多次使用新生成的数据库。所以这不是问题
  • 类似问题(不同原因):stackoverflow.com/q/23666716/176877

标签: entity-framework asp.net-mvc-4 entity-framework-migrations


【解决方案1】:

我也遇到了同样的问题。

System.BadImageFormatException 的原因是因为我依赖于 x64 DLL(在我的情况下为Magick.NET-x64.dll)。强制项目构建 32 位解决了它。

  1. 选择您的 WebProject
  2. 转到属性
  3. 选择构建标签
  4. 更改平台目标:从 x64Any CPU

希望这对其他人有所帮助。

【讨论】:

  • 有时需要 x64 并且您不能使用任何 CPU。
【解决方案2】:

这取决于您项目的当前输出文件夹。 将目标平台更改为 x64 时,输出文件夹也会更改为 bin\x64\Debug。 这似乎是 enable-migrations cmdlet 的问题。 将输出文件夹改回 bin\Debug 以进行 x64 平台构建后,一切正常。

发现于:http://entityframework.codeplex.com/discussions/438488

【讨论】:

    【解决方案3】:

    我有一些东西可以帮助你...

    This 帖子也有类似的例外。

    MSDN 提出类似的问题(见底部备注)。

    如果我是你,我会尝试按照另一篇文章中的步骤进行操作,也许还会尝试“清洁解决方案”。在我看来,PM 在执行 cmdlet 时遇到了与该帖子类似的问题,因此我将检查 MyApp.Properties 下的所有设置。

    希望你能找到解决办法。

    【讨论】:

    • 我可以告诉“enable-migrations”或“update-database”在哪里寻找我的项目的 dll 吗?
    • 我尝试了第一个链接中的内容(“这篇文章有类似的例外”)和它的一些变体,但没有成功。
    【解决方案4】:

    尝试以下方法:

    • 检查解决方案中引用实体框架的所有项目是否都引用相同的版本,

    • 卸载任何不包含应用程序代码的项目,例如设置/部署或文档项目,以及

    • 暂时禁用任何 Visual Studio 插件。

    然后重新启动 Visual Studio 并再次执行该命令。另外,看看以管理员身份运行 VS 是否有帮助。

    【讨论】:

    • (1) 我的解决方案中只有一个项目,(2) Idem,(3) 喜欢哪个附加组件?我会尝试,虽然我从未安装过任何插件(NuGet 是插件吗?)
    • 尝试确定这是您的VS安装问题还是您的代码问题。为此,请使用默认设置创建一个空的控制台应用程序。安装 EF NuGet 包,并创建一个最小的 DbContext 和一个只有一个属性的示例实体。将代码添加到实例化上下文并执行查询的 main 方法中。检查它运行。您可以启用迁移吗?
    • 如果有效,则说明您的其他项目中的代码或设置有问题。如果测试失败,请尝试修复您的 VS 安装。
    • 我的 VS 安装没有问题,因为我已经尝试在空项目上运行 Enable-Migrations 并且效果很好。这确实是我的项目配置/设置的问题。
    • @DaveWilliams 的建议有帮助吗?检查包含DbContext 的项目的输出目录。是bin\Debug 还是bin\x??\Debug?后者似乎不适用于迁移。
    【解决方案5】:

    我终于找到问题所在了!

    我所做的是创建一个全新的解决方案。然后我开始从原始解决方案中复制/粘贴/“包含在项目中”每个 .cs。每次粘贴时,我都尝试运行“Enable-Migrations”命令。每次粘贴它都运行良好,直到我发现导致 Enable-Migrations 没有运行的有问题的 .cs。

    然后,在有问题的 .cs(它是一个控制器)中,我开始隔离代码以查看导致问题的原因。

    这是造成差异的代码(Enable-Migrations ok vs badimageformatexception 等)

        /// <summary>
        /// GET: /MessagesAjax/SendWithInetlab/?to=56995189711&body=bla
        /// </summary>
        [JsonHandleError]
        public JsonResult SendWithInetlab(string to, string body) // TODO: Delete
        {
            Inetlab.SMPP.SmppClient client = new Inetlab.SMPP.SmppClient();
            client.Connect("200.54.98.222", 54002);
    
            // TODO: test
            if (client.Status == Inetlab.SMPP.Common.ConnectionStatus.Open)
            {
                client.Bind("blah", "pwd", Inetlab.SMPP.Common.ConnectionMode.Transmitter);
    
                if (client.Status == Inetlab.SMPP.Common.ConnectionStatus.Bound)
                {
                    IList<SubmitSmResp> respList = client.Submit(
                        SMS.ForSubmit().From("56951000001").To(to).Text(body)
                        );
    
                    client.UnBind();
                }
                client.Disconnect();
            }
    
            return Json("bla", JsonRequestBehavior.AllowGet);
        }
    

    【讨论】:

    • 奇怪!我发现为我的 POCO 实体创建一个项目,为我的 DbContext 以及配置和迁移类创建另一个项目效果很好。这样做可能有助于避免将来出现类似的错误。
    • 您的意思是在一个项目中隔离控制器类和在另一个项目中隔离“模型”类(+ DbContext)?这不是针对 MVC 本身吗?我的意思是:我最终会拥有一个“M”项目和一个“VC”项目
    • 好问题。最近,我倾向于为一个相当大的项目创建大量项目(以及由此产生的程序集)。这似乎是一个很好的做法。在这里,您将为您的 EF“模型”类(实体本身)创建一个项目,理想情况下它不依赖于 EF 程序集。您将创建另一个项目,为 EF 相关位引用它。然后,您将从您的 MVC 项目中引用 both...
    • 这会给你什么?好吧,一方面它可以避免你在这里遇到的问题。但它也会在未来为您提供更大的灵活性。假设您要编写一个小工具,供管理员在服务器上运行以清理数据库。您可以在控制台应用程序中重复使用您的模型和 EF 程序集。或者说您想编写程序的 Windows 应用商店应用程序版本:您可以将模型放在可移植类库中并在客户端代码中使用它! (此链接 - forums.asp.net/t/1683781.aspx/1 - 表明分离模型类并不疯狂)
    • 啊,谢谢!然后我可能会这样做,因为我打算拥有一个工作者角色(天蓝色的术语),这肯定需要重用模型(因为这个工作者也需要使用数据库,就像 web 角色一样)
    猜你喜欢
    • 2019-02-11
    • 1970-01-01
    • 2011-07-10
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    相关资源
    最近更新 更多