尝试在EF 4.3.1中启用迁移时引发的异常

11
我正在使用通过nuget安装的Entity Framework 4.3.1在我的.Net 4.0类库项目中。 在某些情况下,当我在PM控制台中调用“Enable-Migrations”命令时,我会收到以下异常:
“Exception calling“ LoadFrom”with”1“argument(s):”无法加载文件或程序集file:///D:\Users\DvoracekR\Documents\Visual Studio 2010\Projects\WebCameras\packages\EntityFramework.4.3.1\tools\EntityFramework.PowerShell.Utility.dll或其依赖项之一。 系统找不到指定的文件。“ 在D:\ Users \ DvoracekR \ Documents \ Visual Studio 2010 \ Projects \ WebCameras \ packages \ EntityFramework.5. 0.0-rc \ tools \ EntityFramework.psm1:393 char:62 + $utilityAssembly = [System.Reflection.Assembly] :: LoadFrom <<<< ((Join-Path $toolsPath Entity Framework.PowerShell.Utility.dll)) + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException“
“您不能在空值表达式上调用方法。 在D:\ Users \ DvoracekR \ Documents \ Visual Studio 2010 \ Projects \ WebCameras \ packages \ EntityFramework.5. 0.0-rc \ tools \ EntityFramework.psm1:394 char:50 + $dispatcher = $utilityAssembly.CreateInstance <<<< ( + CategoryInfo:InvalidOperation:(CreateInstance:String)[],RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull“
“Exception calling“ CreateInstanceFrom”with”8“argument(s):”无法加载程序集EntityFramework.PowerShell,Version=4.3.1.0,Culture=neutral,PublicKeyToken=b77a5c561934e089中的类型System.Data.Entity.Migrations.En ableMigrationsCommand。“ 在D:\ Users \ DvoracekR \ Documents \ Visual Studio 2010 \ Projects \ WebCameras \ packages \ EntityFramework.5. 0.0-rc \ tools \ EntityFramework.psm1:418 char:31> + $domain.CreateInstanceFrom <<<< ( + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException“

1
如果您想在这里得到答案,请避免使用本地化版本的.NET框架 - 带有本地语言信息的问题通常会被关闭为过于局部化。您的错误消息包含一些矛盾的信息 - 它试图从EF 5.0 RC目录中加载EF 4.3.1 PowerShell扩展。那么您使用的是哪个版本? - Ladislav Mrnka
我正在使用版本4.3.1。我也尝试使用NuGet卸载Entity Framework并重新安装它。但是什么也没有改变。Enable-Migrations命令仍然试图加载不存在的程序集。我应该尝试安装最新的预发布版本吗? - Rudolf Dvoracek
在packages.config和Packages目录中,您看到了什么? - Ladislav Mrnka
packages.config 文件: - Rudolf Dvoracek
我在我的包目录中只有这些子目录13.06.2012 09:33 <DIR> . 13.06.2012 09:33 <DIR> .. 18.05.2012 12:16 <DIR> Common.Logging.2.0.0 13.06.2012 09:33 <DIR> EntityFramework.4.3.1 20.01.2012 09:33 <DIR> Lextm.SharpSnmpLib.7.0 10.05.2012 15:41 <DIR> Lextm.SharpSnmpLib.7.0.0.2 18.05.2012 12:03 <DIR> log4net.2.0.0 26.03.2012 13:55 <DIR> MvvmLight.3.1.1 12.06.2012 16:54 437 repositories.config 12.04.2012 11:14 <DIR> SilverlightToolkitWP.4.2011.12.14 - Rudolf Dvoracek
6个回答

25

我解决了上述问题。

  1. 我使用NuGet包管理器卸载了Entity Framework。
  2. 我手动清除了以“Entity”开头的子目录。
  3. 我重新安装了Entity Framework 4.3.1。

现在迁移已经正确启用。


我最近在EF 5的一个项目中遇到了这个问题。 - Kirsten
1
这在我安装了EF6然后又还原之后再次发生了。你的修复方法再次奏效了。 - Kirsten
1
第二步非常重要...我曾经尝试过没有第二步,但是什么也没有改变。我已经正确地重复了所有步骤,现在一切都正常了。 - Simone
这对我不起作用。实际上,第一步会自动删除所有与EF相关的包(我通过浏览包文件夹进行了检查)。因此,在这种情况下,第二步根本没有意义。我甚至在卸载EF后将所有更改都提交到源代码控制服务器中。重新启动Visual Studio并开始新的EF安装,仍然无法安装,EntityFramework.PowerShell.Utility.dll仍然丢失/无法加载,就像它所抱怨的那样。(在我的情况下,EF版本为6.1.3) - King King

2

我知道这是一个旧问题,已经有了答案,但我遇到了这个问题,想分享一下我的解决方法。


我的解决方案在源代码控制中,而我把本地项目搞砸了。 我决定从源代码控制重新开始,所以我创建了一个新文件夹,并从SVN中检出了代码。

当我这样做时,我再也无法创建迁移。 我得到了上面列出的相同错误。 我尝试了Uninstall-Package EntityFramework,但得到了关于EntityFramework中缺少文件/引用的类似消息。

我回到了我的旧文件夹,并查看了$Project\packages\EntityFramework.6.0.2\,并将其与我的新文件夹进行了比较。 由于它们不在源代码控制中,因此缺少了几个DLL / Xml文件。 它们位于\tools\\lib\net40\lib\net45\目录中。

我只是将这些文件复制到了我的新项目中,关闭/重新打开Visual Studio,并进行了重建。之后,一切正常运行。


1
重新安装NuGet包对我没有用。有效的方法是将项目从网络驱动器移动到本地驱动器。运行比较显示,除了objbin目录,所有文件都是二进制相同的。
如果我没记错,最后一次尝试执行Update-Database是在将项目移动到网络驱动器之前。

0

这个问题发生在我使用同一台物理机上的不同虚拟机时。

VMWare Fusion默认与OS X共享配置文件目录,这会在使用安装了Visual Studio的多个虚拟机时导致许多问题,实际上我安装的几乎每个应用程序都开始表现奇怪。那时应该有所警觉。

关闭文件夹共享解决了这个问题,但这并不是很明显,因为我没有选择不共享配置文件夹的选项,只能添加/删除其他文件夹。

希望我的愚蠢能帮助其他人 :)


0
当我通过发送项目与同事共享时,我遇到了这个问题。当他把它发回给我时,我发现在尝试添加迁移时返回的项目给了我这个错误。我通过用原始项目的文件夹覆盖返回项目中的packages\EntityFramework.5.0.0文件夹来解决了这个问题。
如果只是在我的机器上移动项目,我就不会遇到这个问题。

Kirsten,我相信你可以使用文章中描述的步骤,位于http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages。这可以帮助您避免在不同用户环境中共享不同的NuGet包。 - Rudolf Dvoracek

0

我在使用Visual Studio 2017打开Visual Studio 2015项目时遇到了同样的问题。以下是我的解决方法:

  1. 手动从工具 -> NuGet程序包管理器 -> 从解决方案管理NuGet程序包中删除Entity Framework。
  2. 搜索Entity Framework
  3. 不幸的是,它有依赖项。所以仅强制删除Entity Framework并不能解决问题。因此,无论依赖项是什么,都要按照上述步骤手动删除。
  4. 最后重新安装Entity Framework和可能已经删除的任何依赖项。完成后,我没有重新启动Visual Studio,在键入enable-migrations时,一切都已经正常工作了。

为了分享我的经验,我尝试了以下步骤:

Uninstall-Package EntityFramework -Force

然后为每个项目安装它:

Install-Package EntityFramework

但这对我没用。所以我猜我必须手动卸载它及其依赖项而不使用force,并重新安装才能使其正常工作。但很高兴它确实起作用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接