类型'Expression <>'在未引用的程序集中定义


84

在ASP.NET MVC 4.5.2框架中。

键入后

@Html.LabelFor()
or 
@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中做了


Answers:


41

我遇到了与您相同的问题,尽管晚了很多。问题是我无法访问Razor视图(.cshtml),因为我收到一条错误消息,指出我缺少一个程序集引用,即System.Web.Mvc,即使它在项目引用中也是如此。经过调查,我注意到安装的NuGet版本是5.2.3,而该项目需要5.2.0。解决方案是降级MVC版本。

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

确认所有对话框,您就可以开始了。


14
您如何注意到您的项目需要5.2.0?
Vanice

3
@ Vanice我认为这取决于.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 '17

9
我使用的是.net 4.7,仍然有此烦人的错误
-Sven

1
我遇到了同样的问题,原来是我在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

58

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

我可以在这里找到解决方案

/programming/6496223/compilation-error-in-net-4-0-web-config-linq-not-found

<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

1
精细!有用。请注意,您应该关闭然后重新打开cshtml文件才能生效。
Mahdi Ataollahi

一旦我浏览了所有web.configs并确保版本匹配stackoverflow.com/a/37381294/8684119
AMG

它有效,但是我发现此解决方案有点脏。无论如何,就我而言,我仅添加对System.Core的引用
T-moty,

45

此错误意味着Visual Studio无法找到System.Web.Mvc程序集来为其Razor视图的智能提供动力。可能需要以下一项或两项进行修复。

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

[root] /Web.config:

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

项目属性:

项目属性

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

[视图文件夹] /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版本


3
这为我工作。非常感谢。
vibs2006 '17

1
这也为我解决了,但不是直接解决。我必须从bin文件夹中删除版本错误的文件,通过nuget更新mvc,然后将正确的版本放在bin文件夹中,然后才能正常工作。如果您通过nuget更新后仍然在bin文件夹中得到错误的版本,请删除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是我的关键。版本与其他任何地方都匹配!
杰伊道金斯

21
  • 关闭cshtml文件
  • 重建解决方案
  • 打开cshtml文件
  • 还是错误?重新启动Visual Studio
  • 还是错误?使用ctm1988的答案

我尝试过这里提到的所有内容...但是仍然无法正常工作..在重新安装Visual Studio时,它的工作非常完美..我以为缺少依赖项是原因..
mansoor 2015年

如果您有一个运行正常的项目,但突然间您遇到了这个问题,则可能是解决方法!
Simon_Weaver

我不敢相信这种方法的工作频率
nmit026

16

我已经尝试了其中的大多数方法,最终对我有用的是卸载项目,编辑csproj文件并添加以下内容:

<Reference Include="System.Core" />

https://stackoverflow.com/a/38371981/2335660


2
有用!看起来像视觉工作室认为System.Core已经添加,但实际上没有添加。因此,您需要手动执行此操作
isxaker


7

我只是遇到了同样的问题,没有解决方案可以解决该问题。我必须将其添加到我的web.config内部System.Web

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

更改某些config周围区域时,我已将其删除。


请使用任何技术或更多技术添加标签。.未找到标签
Vikrant Kashyap

添加compiling / targetFramework属性对我有用。
Tom Bowers

我不小心为目标框架添加了两个不同的值,这解决了我的问题。
Geethanga

这为我解决了混合asp.net/webforms应用程序的问题:我将应用程序的目标框架升级到4.7,却没有注意到这两个web.config设置仍然指向4.5。
汤姆·里根

这个问题在4.8上解决了同样的问题
Mamdouh

4

就我而言,此消息仅在打开Resharper时显示。我清除了Resharper缓存,重新启动了VS,关闭了Resharper并再次将其打开。该消息消失了。


1
就我而言,只需关闭并重新启动VS。我有剃须刀,但不需要执行任何操作。
JayJay

3

我遇到了缺少程序集的同样问题,并且发生了VS2017版本未将其正确复制到Bin文件夹的情况。这些步骤对我有帮助:

  • 导航到Web项目的“引用”节点
  • 查找对System.Core的引用
  • 打开“ VS属性”窗口
  • 在属性窗口中,将“复制本地:False”更改为“ True”

从以下注释中获取: CS0012:类型“ ##### Any type #####”在未引用的程序集中定义


虽然此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。-评论
史蒂夫·戈麦斯

1
@SteveG。谢谢,史蒂夫!我已经编辑了 之前没有做过多评论,也缺乏一些礼节……:-)
Angel_D

1
这解决了我的问题,我不得不提到还需要Visual Studio Restart,谢谢。
Saeed Mousavi

3

在Web.config中,我需要更改:

  <system.web>
    <compilation debug="true" targetFramework="4.7">

  <system.web>
    <httpRuntime targetFramework="4.7" />
    <compilation debug="true" targetFramework="4.7">

1
谢谢@juFo!这已在带有MVC 5的Visual Studio 2019中为我修复了。我的MVC项目的目标框架为4.7.2,而web.configtargetFramework<httpRuntime><compilation>标记中仍具有4.7.1 。只需更新属性以正确反映项目的.NET Framework版本,即可为我修复该属性。
iCode

2

检查cshtml文件“构建操作”是否设置为“内容”。

我使用ReSharper,并且注意到由于某种原因,调用模板时,生成的文件默认为“无”。


2

将以下内容添加到Web.config(在根目录中)。我绝对尝试了所有较早的建议,但在找到以下内容之前没有任何效果。希望它可以为其他人节省时间。

我使用targetFramework =“ 4.6.1”,但如果不同,请将其更改为您使用的版本。

<system.web>
   <compilation debug="true" targetFramework="4.6.1" />
   <httpRuntime targetFramework="4.6.1" />
</system.web>

2

手动将System.Core.dll文件添加到bin文件夹中。重新启动VS并构建项目。为我解决

@Html帮助器和Kendo网格上的所有视图中都有设计错误。

在Web.config中添加System.Core程序集无济于事,也没有降级MVC版本。尝试手动添加对System.Core的引用时出现错误:

不能添加对“ System.Core”的引用。该组件已由构建系统自动引用。

确保检查项目属性中的TargetFramework是否与项目web.config中的TargetFramework相匹配。

bin文件夹的屏幕快照


1

对我来说,项目菜单下有一个“启用C#6.0 / VB 14”选项。选择此选项就可以了。以前,我曾尝试按照本文中的建议修改web.config,重新启动Visual Studio等。


1

我遇到了同样的问题。基本上问题是使用的其他版本System.Web.Mvc。因此,最好的事情就是打开Tools > Nuget Package Manager > Manage Nuget Packages for Solution。您可能会System.Web.MvcCosolidate标签上看到。升级或降级将是最佳选择。如果使用当前最新的.Net框架,.Net 4.6.1则应将所有System.Web.Mvc版本升级到5.2.4.0。祝好运!


我有12个需要升级的软件包,更新完所有内容后sln即可正常运行。谢谢。
杰米

1

好吧,我通过更正/Views/web.config中的程序集引用来解决它,请参见图像:

在此处输入图片说明


1

删除bin,.vs和obj目录。在Visual Studio上构建项目后。


我在项目的各个版本之间进行了很多切换,有一些针对不同的框架。这解决了我的“ System.Core”参考错误。感谢您的简单提醒,有时在结帐之间有时需要清理VS环境。
Suncat2000

0

这是我的一种看法-其他所有人都很好。我做了以下事情:

  • 创建一个新的视图
  • 将内容从旧视图复制并粘贴到新视图
  • 删除旧的
  • 将新的重命名为旧的

0

重新启动Visual Studio对我有用。


经过一些看似无害的NuGet更新,这件事发生在我身上。它只是像jQuery和bootstrap之类的库。更新后,我收到此错误消息,并重新启动Visual Studio对其进行了修复。
史蒂夫·辛纳

0
  • 关闭档案
  • 清洁溶液
  • 建立解决方案
  • 重新打开文件

0

尝试添加

using system.Linq.Expressions;


4
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
Farkie

0

我也有这个问题。更改targetFramework="4.5.2"targetFramwork="4.5" web.config文件即可解决该问题。


0

如果仅在一个或两个CSHTML文件中得到此文件,则该文件已损坏。

我曾经在一个损坏的文件中发生这种情况,该文件包含一些隐藏的unicode字符。尝试将文档的所有文本复制到新的记事本实例。清除原始文件的内容并保存...如果文件长度> 0,则说明有些问题。

删除文件,然后将记事本实例保存在旧版本上。所有的错误对我来说都消失了。

我在解决方案中已经发生过几次。不知道是什么原因造成的,但是我怀疑它是Resharper在开始将大量内存吞入深渊时搞砸的。

我是唯一与Resharper有爱/恨关系的人吗?


0

如果您的解决方案中有多个项目都没有针对相同版本的.NET Framework,则可能导致这种情况。例如,如果您的Web应用程序项目以.NET 4.5为目标,并且您在解决方案中以.NET 4.5.2为目标的另一个项目具有程序集引用。要解决此问题,您需要将您的项目更改为全部针对相同版本的.NET Framework。


0

如果没有答案有效,请使用此答案。我遇到了同样的问题!实际上,迁移文件夹中的configuration.cs文件已丢失/删除。我没有删除迁移文件夹,也没有从数据库中删除迁移表。软件包管理器控制台(PM)中的下一步使用以下命令:

Enable-Migrations -Force
Add-Migration Initial
update-database

此过程重新创建了configuration.cs文件,一切正常!


0

检查您的项目属性以获取目标框架。我通过匹配目标框架解决了这个问题。.net框架4.6.1 MVC 5.2.3是合适的解决方案。我从NuGet获得了该MVC版本。



0

我完成了以上所有操作,最后发现为我解决问题的方法(在带有MVC 5.2.4的.net框架4.7.1站点上)将其添加到了根web.config中<compilation>-

<assemblies>
  <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.