我无法启用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.我也尝试创建一个新的解决方案,然后将粘贴的所有类复制到它并且它也犯了同样的错误
发生了什么事? 我曾经在此项目中启用了迁移,但两天后我删除了所有迁移内容,因为它不是必需的。但现在我真的需要它们
答案 0 :(得分:3)
我遇到了同样的问题。
System.BadImageFormatException
的原因是因为我依赖于x64 DLL(在我的情况下是Magick.NET-x64.dll
)。强制项目以32位构建解决了它。
希望这有助于其他人。
答案 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);
}