“Expression<>”类型定义在一个未被引用的程序集中。

99
在ASP.NET MVC 4.5.2 Framework中,在视图中键入@Html.LabelFor()@Html.EditorFor()后,我遇到了以下错误:

类型“Expression<>”在未被引用的程序集中定义。 必须向程序集“System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”添加引用。


我已经添加了程序集引用System.Core.dll,版本为4.0.0.0,运行时版本为v4.0.30319,并且我已经在web.config文件中做了相应的设置。

可能是VS 2015 IntelliSense:Assembly Not Referenced Error的重复问题。 - Owen Pauling
31个回答

67

我不确定您是否仍然存在这个问题,但我也遇到了同样的问题。

我在这里找到了解决方案

https://dev59.com/52w15IYBdhLWcg3wntEQ

<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

我希望这有所帮助。


我已经说过了,我在发布这个问题之前已经尝试过了。无论如何,谢谢你们两个。 - mansoor
3
好的!它能用。请注意,你应该关闭并重新打开 cshtml 文件才能生效。 - Mahdi Ataollahi
这对我有用,一旦我检查了所有的web.config文件,并确保版本匹配,就像https://dev59.com/Q10Z5IYBdhLWcg3wxCqQ#37381294中所述。 - AMG
它能够工作,但我觉得这个解决方案有点不太优雅。无论如何,在我的情况下,我只添加了对System.Core的引用。 - T-moty
1
这个解决方案并不是“肮脏”的。它就是错误提示你要做的事情。我没有理解的是它需要放到web.config文件中。 - Ricky

52

这个错误意味着Visual Studio无法定位System.Web.Mvc程序集来支持Razor视图的智能感知。修复它可能需要以下一项或两项操作:

  1. 确保主Web.config文件(网站根目录下的文件)中编译属性的.NET框架版本与项目属性指定的版本相同。

[root]/Web.config:

<system.web>
    <compilation targetFramework="4.6" />

项目属性:

项目属性

  1. 确保在视图文件夹下的web.config文件中指定的MVC程序集版本与你所使用的项目中的MVC程序集版本相同。

[views folder]/web.config:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

MVC装配参考属性:

MVC版本


4
这对我有用。非常感谢。 - vibs2006
1
这对我也解决了问题,但不是直接的。我不得不从我的bin文件夹中删除错误版本的文件,通过NuGet更新MVC,然后它会在我的bin文件夹中放置正确的版本,并且它可以工作。如果你仍然在通过NuGet更新后在bin文件夹中得到错误版本,请删除现有的文件。 - Joshua K
谢谢。我通过NuGet将Microsoft.AspNet.Mvc更新到v5.2.7,并在应用程序仍在工作时在.schtml文件中看到了这个错误。结果发现,在<system.web.webPages.razor>下的Views文件夹中的web.config仍然是v5.2.3。将其修改为v5.2.7有所帮助。 - vkelman
这个有效 - 谢谢!记得检查 [Views]/web.config 对我来说非常关键。版本在其他地方都匹配了,就是那里没有! - Jay Dawkins
非常感激,在我的情况下,MVC版本和MVC程序集版本是不同的。我将所有的5.0.0.0版本都改为了5.2.3.0在view/Web.config文件中。 - hossein andarkhora

45

我曾经遇到与您相同的问题,尽管时间晚得多。问题是我无法访问 Razor 视图(.cshtml),因为我收到了一个错误提示,指出我缺少一个程序集引用,即System.Web.Mvc,尽管它在项目引用中。经过调查,我发现已安装的 NuGet 版本是 5.2.3,而项目需要 5.2.0。解决方法是降级 MVC 版本。

  1. 转到 项目-> NuGet 包管理器。
  2. 搜索MVC; 它将是第一个结果。
  3. 接下来要从 NuGet 包的详细信息下拉菜单中选择“降级”并提交。

确认所有对话框,然后您可以开始使用了。


17
你是怎么注意到你的项目需要5.2.0版本的? - Vanice
3
我认为这取决于.NET Framework的版本: .NET 4.5.2 - > MVC 4.0.0; .NET 4.6.0 - > MVC 5.2.0; .NET 4.6.1 - > MVC 5.2.3。 (未经确认) - JoaoRibeiro
11
我正在使用.NET 4.7,仍然出现这个让人烦恼的错误。 - Sven
2
我遇到了同样的问题,结果发现是我的web.config文件中的调试值设置为false。将其设置为"True" <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> - mlaribi
我已经尝试了上述解决方案,它能正常工作。我的VS解决方案版本是4.6.2,然后我将MVC从5.2.4降级到了5.2.3。所以我知道MVC 5.2.3与.NET 4.6.2兼容。 - Ibrahim Inam

27
  • 关闭cshtml文件
  • 重新构建解决方案
  • 打开cshtml文件
  • 仍有错误?重启Visual Studio
  • 仍有错误?使用ctm1988的答案

我已经尝试了这里提到的所有方法...但仍然无法正常工作...重新安装Visual Studio后它可以完美运行...我认为缺少依赖项是原因... - mansoor
如果您曾经有一个项目一直运行良好,但突然出现了问题,那么这可能是解决方法! - Simon_Weaver

22

3
它起作用了!看起来Visual Studio认为System.Core已经被添加了,但实际上并没有。所以你需要手动添加它。 - isxaker

12

删除项目目录中的[projectName].csproj.user文件对我很有帮助。


适用于我使用的是Vs 2017 Asp MVC5。 - Speuline
2
这个成功了,使用VS 2019和MVC5。我也清理了bin/obj和.vs文件夹。 - Leniency
这解决了我的问题。谢谢。 - kisetu

7

我刚刚遇到了完全相同的问题,但是所有的解决方案都没有解决问题。我不得不在System.Web中将以下内容添加到我的web.config文件:

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

我修改了一些config时,把它给删除了。

请在以下的程序相关内容中添加标签,包括任何技术或其他信息。没有找到标签。 - Vikrant Kashyap
添加编译/目标框架属性对我有用。 - Tom Bowers
我意外地为目标框架添加了两个不同的值,这解决了我的问题。 - Geethanga
这对我解决了问题,我的应用程序是混合的asp.net/webforms应用程序:我将应用程序的目标框架升级到4.7,没有注意到这两个web.config设置仍然指向4.5。 - Tom Regan

6

1
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。- 来自审查 - Steve Gomez
1
@SteveG。谢谢,Steve!我已经编辑过了。以前没有多少评论,缺乏一些SO礼仪... :-) - Angel Dinev
1
这个解决了我的问题,我必须提到需要重新启动Visual Studio,谢谢。 - Saeed Mousavi

4

在我的情况下,只有当Resharper开启时才会显示此消息。我清除了Resharper缓存,重新启动了VS,关闭并重新开启了Resharper后,该消息已消失。


1
在我的情况下,只需关闭并重新启动VS。我有resharper,但不需要对其进行任何操作。 - JayJay

4
我做了以上所有步骤,最终发现对我有用的解决方法(在一个使用MVC 5.2.4和.NET框架4.7.1的网站上)是在根web.config中标签内添加以下内容。
<assemblies>
  <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>

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