如何永久解决ASP.NET MVC5项目中NuGet的Entity Framework报错问题
问题描述
我有一个ASP.NET MVC 5项目,原本运行正常,但每次添加视图(视图可成功创建)后编译解决方案时,会出现如下错误:
此项目引用的NuGet包在本机缺失,请使用NuGet包还原功能下载。缺失文件为packages\EntityFramework.6.4.4\build\EntityFramework.props
每次我都需要重新更新Entity Framework(它总会自动回退到6.1.3版本),这让我十分困扰,请问有没有永久解决该问题的办法?
补充说明: 项目中所有targetframework=net472的NuGet包如下:
<package id="Antlr" version="3.5.0.2" targetFramework="net472" /> <package id="bootstrap" version="3.3.4" targetFramework="net472" /> <package id="EntityFramework" version="6.4.4" targetFramework="net472" /> <package id="FontAwesome" version="4.7.0" targetFramework="net472" /> <package id="jQuery" version="3.6.0" targetFramework="net472" /> <package id="jquery.datatables" version="1.10.15" targetFramework="net472" /> <package id="jQuery.UI.Combined" version="1.13.1" targetFramework="net472" /> <package id="jQuery.Validation" version="1.19.4" targetFramework="net472" /> <package id="Microsoft.AspNet.Mvc" version="5.2.9" targetFramework="net472" /> <package id="Microsoft.AspNet.Razor" version="3.2.9" targetFramework="net472" /> <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net472" /> <package id="Microsoft.AspNet.WebPages" version="3.2.9" targetFramework="net472" /> <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="3.6.0" targetFramework="net472" /> <package id="Microsoft.jQuery.Unobtrusive.Ajax" version="3.1.2" targetFramework="net472" /> <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.12" targetFramework="net472" /> <package id="Microsoft.Owin" version="4.2.2" targetFramework="net472" /> <package id="Microsoft.Web.Infrastructure" version="2.0.0" targetFramework="net472" /> <package id="Modernizr" version="2.8.3" targetFramework="net472" /> <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" /> <package id="Owin" version="1.0" targetFramework="net472" /> <package id="PasswordHashTool" version="1.0.0" targetFramework="net472" /> <package id="popper.js" version="1.16.1" targetFramework="net472" /> <package id="WebGrease" version="1.6.0" targetFramework="net472" />
永久解决办法
1. 修复项目文件中的EF引用
右键项目 → 卸载项目 → 编辑项目文件(.csproj):
- 确保
<Reference>节点中EF版本为6.4.4,路径指向正确的NuGet包位置:<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath> </Reference> <Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath> </Reference> - 检查
<Import>节点,确保EF的props和targets文件引用正确:<Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" /> <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" /> - 删除所有指向6.1.3版本的引用节点,保存后重新加载项目。
2. 锁定EF版本并禁用自动回退
- 打开解决方案根目录下的
packages.config,确认EF版本为6.4.4,添加allowedVersions属性锁定版本:<package id="EntityFramework" version="6.4.4" targetFramework="net472" allowedVersions="[6.4.4]" /> - 打开Visual Studio的NuGet包管理器设置(工具 → NuGet包管理器 → 程序包管理器设置),取消勾选“允许NuGet在构建时下载缺失的包”和“自动检查更新”,避免构建时自动回退版本。
3. 清理NuGet缓存并重新还原包
- 打开命令提示符,执行以下命令清理NuGet缓存:
nuget locals all -clear - 在Visual Studio中右键解决方案 → 还原NuGet包,确保所有包(包括EF 6.4.4)正确下载到本地
packages目录。
4. 检查并修复视图模板的EF依赖
添加视图时,Visual Studio可能会使用默认模板引用旧版本EF:
- 找到Visual Studio的视图模板目录(例如VS2019社区版路径:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\ItemTemplates\CSharp\Web\MVC 5\CodeTemplates\Views\,根据你的VS版本调整)。 - 打开模板文件(如
Edit.tt),检查是否有硬编码的EF 6.1.3引用,替换为6.4.4或删除版本依赖。
5. 修复NuGet配置文件
- 确保解决方案根目录下的
nuget.config文件包源配置正确,无指向旧版本EF的私有源。若没有该文件,可创建一个:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> </packageSources> <activePackageSource> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> </activePackageSource> </configuration>
内容的提问来源于stack exchange,提问作者Salman Abbas
相关产品推荐
相关产品推荐

