为啥 ef Add-Migration 出现错误
Posted
技术标签:
【中文标题】为啥 ef Add-Migration 出现错误【英文标题】:Why is there an Error in ef Add-Migration为什么 ef Add-Migration 出现错误 【发布时间】:2015-07-20 07:29:17 【问题描述】:我有几个类文件。现在我正在添加一个新模型类并尝试输入add-migration InitialCreate
,但出现以下错误:
PM> add-migration InitialCreate
Exception calling "LoadFrom" with "1" argument(s): "Could not load file or assembly 'file:///C:\Users\user\Documents\Visual Studio 2013\Pro
jects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.PowerShell.Utility.dll' or one of its dependencies. Operati
on is not supported. (Exception from HRESULT: 0x80131515)"
At C:\Users\user\Documents\Visual Studio 2013\Projects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:780 c
har:62
+ $utilityAssembly = [System.Reflection.Assembly]::LoadFrom <<<< ((Join-Path $ToolsPath EntityFramework.PowerShell.Utility.dll))
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
You cannot call a method on a null-valued expression.
At C:\Users\user\Documents\Visual Studio 2013\Projects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:781 c
har:50
+ $dispatcher = $utilityAssembly.CreateInstance <<<< (
+ CategoryInfo : InvalidOperation: (CreateInstance:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Exception calling "CreateInstanceFrom" with "8" argument(s): "Could not load file or assembly 'file:///C:\Users\user\Documents\Visual Studi
o 2013\Projects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.PowerShell.dll' or one of its dependencies. Opera
tion is not supported. (Exception from HRESULT: 0x80131515)"
At C:\Users\user\Documents\Visual Studio 2013\Projects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:809 c
har:31
+ $domain.CreateInstanceFrom <<<< (
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
PM>
【问题讨论】:
【参考方案1】:使用包管理器,需要重新安装实体框架:
卸载-Package EntityFramework -Force
然后为每个项目安装它:
安装包EntityFramework
然后别忘了重启工作室。
https://***.com/a/14994432/1845408
【讨论】:
【参考方案2】:改为使用命令EntityFramework6\add-migration migration name
。微软更改了命令的名称。
【讨论】:
你的回答很有用。似乎一开始尝试单独使用 add-migration,它在应用 "enable-migrations" 命令后起作用。我尝试不使用“EntityFramework”开关并出现@noushad-mohammed 错误。我正在使用:VS2019 CE EF 6.4.4 现在我明白为什么每次开始“启用迁移”时都会出现以下消息A version of Entity Framework older than 6.3 is also installed. The newer tools are running. Use 'EntityFramework\Add-Migration' for the older version.
谢谢。【参考方案3】:
只需重新启动 Visual Studio 并清理解决方案并重新构建它。
【讨论】:
【参考方案4】:我今天遇到了一个稍微不同的案例,我在这里写下详细信息,以防可能对某人有所帮助。错误是引用了我的一个程序集,包含 EF DbContext 的程序集依赖于该程序集。 我解决了它,将引用的程序集设置为“复制本地”“true”,以便在构建迁移时制作本地副本,因此能够找到它。
【讨论】:
【参考方案5】:确保 VS 处于管理员模式
【讨论】:
为了得到一个有用的答案,这个反应需要扩展。解释为什么这是问题的答案。 我的 VS 会话处于管理员模式,出现同样的异常,这不是一个有效的答案。【参考方案6】:在我的例子中,它是主项目和包含 DbContext 的项目之间的不同实体框架版本。 我刚刚将两个项目中的软件包版本更新为 v6.4.4
【讨论】:
这以及清理/重建和重新启动 VS 为我解决了这个问题。【参考方案7】:您需要重新安装实体框架:
【讨论】:
【参考方案8】:我去了“管理解决方案的 Nuget 包...”并更新了我的所有包。这对我有用。
然后我收到另一个错误Cannot bind argument to parameter 'Path' because it is null
。
在包管理器控制台中运行任何 EF 命令之前,将另一个项目设置为我的 Web 应用程序以外的启动项目,对我有用。
【讨论】:
是的,在“将另一个项目设置为除我的 Web 应用程序之外的启动项目”之后,此错误已解决。谢谢【参考方案9】:缺少的是(解决方案文件夹)/packages/EntityFramework.6.1.3/tools/ 中的 dll。
我会尝试的事情:
-
Nuget 将保留 .nupkg 的副本,您可能会在其中找到丢失的文件 ((Solution Folder)/packages/EntityFramework.X.Y.Z/)(以 zip 格式打开 nupkg)
如果没有,您可能会幸运地在此处手动重新下载软件包 https://www.nuget.org/packages/EntityFramework(确保下载正确的软件包。在您的情况下,它将是 6.1.3)
如果这不起作用,您可以重试上述完全删除和重新安装 EF 的解决方案之一,但请确保为每个项目安装相同的版本。
似乎还有不包含这些文件的版本。例如,在撰写此答案时,6.3.0 实际上不包含 6.1.3 所需的 dll。我也成功地将 dll 从旧版本(如 6.1.3)复制到新版本(如 6.3.1)(可能会发出警告,但通常按预期工作)。
【讨论】:
以上是关于为啥 ef Add-Migration 出现错误的主要内容,如果未能解决你的问题,请参考以下文章
EF Core 迁移错误:PositionalParameterNotFound,Add-Migration