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

时间:2015-06-27 08:43:23

标签: asp.net-mvc asp.net-mvc-5.1

在ASP.NET MVC 4.5.2框架中。

输入后

@Html.LabelFor()
or 
@Html.EditorFor()

在视图中

我收到错误:类型'表达式<>'在未引用的程序集中定义。您必须添加对程序集'System.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用。

我添加了程序集参考System.Core.dll,版本4.0.0.0,运行时版本v4.0.30319。我也在web.config中做了

28 个答案:

答案 0 :(得分:44)

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

我能够在这里找到解决方案

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"/>

我希望这有帮助..

答案 1 :(得分:34)

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

  1. 确保编译的.NET框架版本 主web.config中的属性(网站根目录中的属性)是 与项目属性中指定的相同。
  2. <强> [根] /Web.config:

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

    项目属性:

    Project Properties

    1. 确保视图中指定的MVC程序集的版本 web.config(views文件夹中的那个)与MVC相同 您在项目中使用的装配。
    2. [观看文件夹] /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

答案 2 :(得分:33)

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

  1. 转到项目 - &gt; NuGet包管理器。
  2. 搜索MVC;这将是第一个结果。
  3. 接下来是从详细信息中选择降级 NuGet包并提交。
  4. 确认所有对话框,您就可以开始了。

答案 3 :(得分:15)

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

答案 4 :(得分:14)

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

<Reference Include="System.Core" />

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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

我刚才遇到了同样的问题,没有一个解决方案解决了这个问题。我必须将此添加到web.config

中的System.Web
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

我在更改config周围的某些内容时删除了它。

答案 7 :(得分:2)

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

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

答案 8 :(得分:2)

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

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

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

答案 9 :(得分:2)

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

答案 10 :(得分:1)

For me, there was an option under the project menu to "Enable C# 6.0/VB 14". Selecting this option did the trick. Previously I tried modifying the web.config, restarting Visual Studio, etc as was suggested in this post.

答案 11 :(得分: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 文件手动添加到垃圾箱中。重新启动并构建项目,它成功了。

Screenshot of bin folder

答案 12 :(得分:1)

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

enter image description here

答案 13 :(得分:1)

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

答案 14 :(得分:1)

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

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

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

答案 15 :(得分: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。祝你好运!

答案 16 :(得分:0)

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

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

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

答案 17 :(得分:0)

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

<compilation>

答案 18 :(得分:0)

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

答案 19 :(得分:0)

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

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

此过程重新创建了配置文件,一切都运行良好!

答案 20 :(得分:0)

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

答案 21 :(得分:0)

如果您只使用一个或两个CSHTML文件...它是一个损坏的文件。

我发现这种情况发生在一个有一些隐藏的unicode字符的损坏文件中。 尝试将文档的所有文本复制到新的记事本实例。 清除原始文件的内容并保存...如果文件长度> 0,有什么不妥。

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

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

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

答案 22 :(得分:0)

尝试添加

using system.Linq.Expressions;

答案 23 :(得分:0)

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

答案 24 :(得分:0)

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

答案 25 :(得分:0)

在我的情况下,解决方案是在Web.Config中移动ConnectionString。此声明应在AppSettings部分之后。

答案 26 :(得分:0)

重启Visual Studio对我有用。

答案 27 :(得分:0)

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

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