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

问题描述 投票:66回答:25

在ASP.NET MVC 4.5.2 Framework中。

打字后

@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中做过

asp.net-mvc asp.net-mvc-5.1
25个回答
35
投票

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

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

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


2
投票

我遇到了丢失程序集的同样问题,而且VS2017版本没有将其正确复制到Bin文件夹中。这些步骤帮助我:

  • 导航到Web项目的References节点
  • 找到对System.Core的引用
  • 打开VS属性窗口
  • 在属性窗口中,将Copy Local:False更改为True

来自此评论:CS0012: The type '#####Any type#####' is defined in an assembly that is not referenced


2
投票

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

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

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

1
投票

对我来说,项目菜单下有一个选项“Enable C#6.0 / VB 14”。选择此选项就可以了。以前我尝试修改web.config,重启Visual Studio等,如本文所述。


1
投票

我遇到了同样的问题。基本上问题是使用不同版本的System.Web.Mvc。所以你最应该打开Tools > Nuget Package Manager > Manage Nuget Packages for Solution。你可以在System.Web.Mvc标签上看到Cosolidate。升级或降级将是最佳选择。如果您使用最新的.Net框架(目前是.Net 4.6.1),您应该将所有System.Web.Mvc版本升级到5.2.4.0。祝好运!


1
投票

将以下内容添加到Web.config(在root中)。我完全尝试了早期建议的所有内容,直到找到下面的内容才算无效。希望它能为别人节省时间。

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

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

1
投票

注意:在web.config中添加System.Core程序集对我没有任何作用,也没有降级MVC版本。尝试通过右键单击引用手动添加System.Core给出了异常:

无法添加对“System.Core”的引用。构建系统已自动引用此组件。

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

几乎所有针对大型企业项目的.cshtml文件都在@Html帮助程序和我的Kendo网格上抛出错误。我彻底检查了代码,没有错误。这是最终为我解决的问题:

清理sln,删除bin,obj,重建,重启VS等等之后,我拉起了系统目录文件夹中的bin文件夹。我手动将System.Core.dll文件添加到bin。重新启动并构建项目,它工作正常。

Screenshot of bin folder


0
投票

这发生在我的一个观点 - 所有其他人都很好。我做了以下事情:

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

0
投票

重启Visual Studio为我工作。


0
投票
  • 关闭文件
  • 清洁解决方案
  • 构建解决方案
  • 重新打开文件

0
投票

尝试添加

using system.Linq.Expressions;


45
投票

我不确定你是否还有这个问题,但我也有同样的问题。

我能在这里找到解决方案

https://stackoverflow.com/questions/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"/>

我希望这有帮助..


0
投票

我也有这个问题。在web.config文件中将targetFramework="4.5.2"更改为targetFramwork="4.5"解决了这个问题。


0
投票

如果只在一个或两个CSHTML文件中得到它...它是一个损坏的文件。

我发生过一个带有一些隐藏的unicode字符的损坏文件。尝试将文档的所有文本复制到新的记事本实例。清除原始文件的内容并保存...如果文件长度> 0,则表示出现问题。

删除文件并将记事本实例保存在旧版本上。所有的错误都消失了。

在我的解决方案中,我已经发生过几次这种情况。不确定是什么导致了它,但我怀疑当它开始吞噬巨大的记忆深入到深渊时它是Resharper搞砸了。

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


0
投票

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


0
投票

如果没有任何答案可以使用这个。我遇到了同样的问题!实际上,迁移文件夹中的configuration.cs文件已丢失/删除。我确实删除了迁移文件夹,并且还从数据库中删除了迁移表。接下来在Package Manager Console(PM)中使用以下命令:

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

这个过程重新创建了configuration.cs文件,一切都很完美!


0
投票

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


0
投票

在我的例子中,解决方案是将ConnectionString移动到Web.Config中。此声明应在AppSettings部分之后。


35
投票

此错误意味着Visual Studio无法找到System.Web.Mvc程序集以为其Razor视图的intellisense提供支持。可能需要以下一个或两个来修复它。

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

[根] /Web.config:

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

项目属性:

Project Properties

  1. 确保视图web.config中指定的MVC程序集的版本(views文件夹中的那个)与您在项目中使用的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 version


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

15
投票

我已经尝试过大部分这些,最终对我有用的是卸载项目,编辑csproj文件,并添加以下内容:

<Reference Include="System.Core" />

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


5
投票

我只是有同样的问题,没有一个解决方案解决了这个问题。我不得不在web.config中加入我的System.Web

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

当我改变一些config时,我已经删除了它。


4
投票

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


3
投票

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


2
投票

检查cshtml文件Build Action是否设置为'Content'。

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

© www.soinside.com 2019 - 2024. All rights reserved.