无法启用 - 迁移。引发System.BadImageFormatException:无法加载文件或程序集

时间:2013-06-01 15:47:35

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

我无法启用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, Func 2过滤器,Func 2 noType, Func 3 multipleTypes,Func 3 noTypeWithName, Func 3 multipleTypesWithName)    在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.我也尝试创建一个新的解决方案,然后将粘贴的所有类复制到它并且它也犯了同样的错误

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

4 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。

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

  1. 选择 WebProject
  2. 转到属性
  3. 选择构建标签
  4. 平台目标:从 x64 更改为任何CPU
  5. 希望这有助于其他人。

答案 1 :(得分:0)

我有一些可以帮助你的事情......

This  帖子有类似的例外。

并且MSDN提出了类似的问题(请参阅底部的评论)。

如果我是你,我会尝试按照其他帖子中的步骤进行操作,也可以尝试“清洁解决方案”。在我看来,由于类似于该帖子的内容,PM在执行cmdlet时遇到问题,因此我会检查MyApp.Properties下的所有设置。

希望您找到解决方案。

答案 2 :(得分:0)

尝试以下方法:

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

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

  • 暂时禁用所有Visual Studio加载项。

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

答案 3 :(得分:0)

我终于找到了问题所在!

我所做的是创造一个全新的解决方案。然后我开始从原始解决方案中复制/粘贴/“包含在项目中”每个.cs。每次粘贴我都尝试运行“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);
    }