我正在尝试在其他计算机上运行的Entity Framework 5项目中运行update-database
。
我下载了代码,重建了项目,当我运行update-database
时,我收到如下错误:
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
at System.Reflection.RuntimeModule.GetTypes()
at System.Reflection.Assembly.GetTypes()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindType[TBase](String typeName, Func`2 filter, Func`2 noType, Func`3 multipleTypes, Func`3 noTypeWithName, Func`3 multipleTypesWithName)
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindConfiguration()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
我认为发生此错误是因为我的环境中缺少某些程序集,或者可能是因为在GAC中发现了不兼容的程序集。但是知道这种类型的whitout无法加载,我处于黑暗状态,所以这是一个非常难以调试的问题。
如何找出无法加载的类型或程序集?消息说“检索LoaderExceptions属性以获取更多信息”,但是如果在包管理器控制台中运行迁移,而不是在我自己的代码中,我该怎么做呢?
在控制台中键入$Error[0].Exception
会显示异常消息,但如何列出其他属性?
答案 0 :(得分:3)
我不确定这是否可以帮助你,但只是提出一个想法......
您可以尝试从代码中运行迁移 - 在那里您可能会遇到异常处理。例如
EF Code First DbMigration without nuget
DbMigrator migrator = new DbMigrator(new YourConfiguration());
migrator.Update(); // or update specific migrations..
您也可以通过配置转换 - 甚至在没有重新编译的情况下转换(用于生产) - 如果您启用了日志记录/跟踪,您可能会从中获得一些错误...
<contexts>
<context type="YourNS.YourContext, YourAssembly">
<databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[YourNS.YourContext, YourAssembly], [YourNS.YourConfiguration, YourAssembly]], EntityFramework" />
</context>
</contexts>
</entityFramework>