1

我正在尝试update-database在其他机器上运行的 Entity Framework 5 项目中运行。

我下载了代码,重建了项目,运行时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 中发现了不兼容的程序集。但是不知道哪种类型无法加载,我一无所知,所以这是一个非常难以调试的问题。

如何找出未能加载的类型或程序集?该消息说“检索 LoaderExceptions 属性以获取更多信息”,但是鉴于迁移在包管理器控制台中运行,而不是在我自己的代码中运行,我该怎么做?

在控制台中键入$Error[0].Exception会显示异常消息,但我如何列出它的其他属性?

4

1 回答 1

3

我不确定这是否可以帮助你,但只是提出一个想法......

您可以尝试从代码运行迁移 - 在那里您可能会获得更好的异常处理。例如

没有 nuget 的 EF Code First DbMigration

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>
于 2013-04-03T14:03:38.970 回答