You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何永久解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:54:19