【问题标题】:The type 'Expression<>' is defined in an assembly that is not referenced'Expression<>' 类型是在未引用的程序集中定义的
【发布时间】:2015-06-27 08:43:23
【问题描述】:

在 ASP.NET MVC 4.5.2 Framework 中,在视图中键入 @Html.LabelFor()@Html.EditorFor() 后,我收到此错误:

类型“Expression&lt;&gt;”在未引用的程序集中定义。您必须添加对程序集“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


【解决方案1】:

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

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

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

我希望这会有所帮助..

【讨论】:

  • 我已经说过了.. 在发布这个问题之前我已经尝试过这个。无论如何谢谢你们俩
  • 很好!有用。请注意,您应该关闭并重新打开 cshtml 文件才能生效。
  • 这对我有用,一旦我检查了所有 web.configs 并确保版本与stackoverflow.com/a/37381294/8684119中的匹配
  • 它有效,但我发现这个解决方案有点脏。无论如何,就我而言,我只添加对 System.Core 的引用
  • 这个解决方案不是“脏”的。从字面上看,这正是错误告诉您要做的事情。我不明白的是它需要进入web.config文件。
【解决方案2】:

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

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

[root]/Web.config:

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

项目属性:

  1. 确保视图中指定的 MVC 程序集的版本 web.config(视图文件夹中的那个)与 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 程序集参考属性:

【讨论】:

  • 这对我有用。非常感谢。
  • 这也为我解决了这个问题,但不是直接解决的。我不得不从我的 bin 文件夹中删除版本错误的文件,通过 nuget 更新 mvc,然后将正确的版本放在我的 bin 文件夹中并且它工作。如果通过nuget更新后bin文件夹中的版本仍然错误,请删除bin文件夹中的现有版本
  • 谢谢。我通过 NuGet 将 Microsoft.AspNet.Mvc 更新到 v5.2.7 并开始在 .schtml 文件中看到此错误,而应用程序仍在运行。原来 下 Views 文件夹中的 web.config 仍然是 v5.2.3。将其修改为 v5.2.7 有所帮助。
  • 这行得通 - 谢谢!记得检查 [Views]/web.config 对我来说很关键。版本匹配其他任何地方,但那里!
【解决方案3】:

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

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

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

【讨论】:

  • 您如何注意到您的项目需要 5.2.0?
  • @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。 (未确认)
  • 我正在使用 .net 4.7 仍然有这个恼人的错误
  • 我遇到了同样的问题,原来是我在 web.config 中的调试值设置为 false。将其设置为“True”
  • 我已经尝试了上述解决方案,它运行良好。我的 VS 解决方案版本是 4.6.2,我将 MVC 从 5.2.4 降级到 5.2.3。所以我知道 MVC 5.2.3 与 .Net 4.6.2 兼容
【解决方案4】:
  • 关闭cshtml文件
  • 重建解决方案
  • 打开cshtml文件
  • 仍有错误?重启 Visual Studio
  • 仍有错误?使用 ctm1988 的答案

【讨论】:

  • 我已经尝试过这里提到的所有内容......但仍然无法正常工作..在重新安装 Visual Studio 时它的工作完美..我认为缺少依赖项是原因..
  • 如果您的项目运行良好,但突然遇到此问题,那么这可能就是解决方案!
【解决方案5】:

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

<Reference Include="System.Core" />

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

【讨论】:

  • 它有效!看起来那个视觉工作室认为 System.Core 已经添加了,但实际上没有。所以你需要手动执行此操作
【解决方案6】:

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

【讨论】:

  • 为我工作 Vs 2017 Asp MVC5
  • 这个工作,VS 2019 & MVC5。我也清理了 bin/obj 和 .vs 文件夹。
  • 这解决了我的问题。谢谢。
【解决方案7】:

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

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

我在更改某些config 时已将其删除。

【讨论】:

  • 请使用任何技术或更多技术添加标签.. 未找到标签
  • 添加编译/targetFramework 属性对我有用。
  • 我不小心为目标框架添加了两个不同的值,这解决了我的问题。
  • 这解决了我的问题,一个混合的 asp.net/webforms 应用程序:我将应用程序的目标框架升级到 4.7,没有注意到这两个 web.config 设置仍然指向 4.5。
【解决方案8】:

我遇到了同样的问题,缺少程序集,并且碰巧 VS2017 构建没有将它正确复制到 Bin 文件夹中。这些步骤帮助了我:

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

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

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • @SteveG。谢谢,史蒂夫!我已经编辑过了。之前没有发表太多评论,缺乏一些礼仪...... :-)
  • 这个解决了我的问题,我不得不提一下,还需要重新启动 Visual Studio,谢谢。
【解决方案9】:

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

【讨论】:

  • 在我的情况下,只需关闭并重新启动 VS。我有 reshaper 但不需要对它做任何事情。
【解决方案10】:

我完成了上述所有操作,最后发现为我解决的问题(在带有 MVC 5.2.4 的 .net 框架 4.7.1 站点上)是将其添加到 &lt;compilation&gt; 内的根 web.config 中 -

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

【讨论】:

    【解决方案11】:

    在 Web.config 中我需要更改:

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

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

    【讨论】:

    • 谢谢@juFo!这在带有 MVC 5 的 Visual Studio 2019 中为我修复了它。我的 MVC 项目的目标框架是 4.7.2,而 web.config 的 &lt;httpRuntime&gt;&lt;compilation&gt; 标签中的 targetFramework 仍然有 4.7.1。只需更新属性以正确反映项目的 .NET Framework 版本即可为我修复它。
    【解决方案12】:

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

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

    【讨论】:

      【解决方案13】:

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

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

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

      【讨论】:

        【解决方案14】:

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

        @Html 助手和我的 Kendo 网格的所有视图中都有设计错误。

        在 Web.config 中添加 System.Core 程序集没有任何作用,降级 MVC 版本也没有。尝试手动添加对 System.Core 的引用时出错:

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

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

        Screenshot of bin folder

        【讨论】:

          【解决方案15】:

          好吧,我通过更正 /Views/web.config 中的程序集引用来修复它,见图:

          【讨论】:

            【解决方案16】:

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

            【讨论】:

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

            重新启动 Visual Studio 对我有用。

            【讨论】:

            • 在一些看似无辜的 NuGet 更新后,这发生在我身上。它只是像 jQuery 和 bootstrap 这样的库。更新后我收到此错误消息并重新启动 Visual Studio 修复它。
            • 我刚刚做了这个,它成功了,去看看。
            【解决方案18】:

            对我来说,项目菜单下有一个“启用 C# 6.0/VB 14”选项。选择此选项可以解决问题。以前我尝试过修改 web.config,重新启动 Visual Studio 等,如本文中所建议的那样。

            【讨论】:

              【解决方案19】:

              我遇到了同样的问题。基本上问题是使用不同版本的System.Web.Mvc。所以最好的事情你应该打开Tools &gt; Nuget Package Manager &gt; Manage Nuget Packages for Solution。您可能会在Cosolidate 选项卡上看到System.Web.Mvc。升级或降级将是最好的选择。如果您使用最新的 .Net 框架,目前为 .Net 4.6.1,则应将所有 System.Web.Mvc 版本升级到 5.2.4.0。祝你好运!

              【讨论】:

              • 我有 12 个软件包需要升级,并且在我更新所有内容后,sln 运行没有任何问题。谢谢。
              【解决方案20】:

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

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

              【讨论】:

                【解决方案21】:
                • 关闭文件
                • 清洁溶液
                • 构建解决方案
                • 重新打开文件

                【讨论】:

                  【解决方案22】:

                  尝试添加

                  using system.Linq.Expressions;

                  【讨论】:

                  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
                  【解决方案23】:

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

                  【讨论】:

                    【解决方案24】:

                    如果您只在一个或两个 CSHTML 文件中发现此问题...这是一个损坏的文件。

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

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

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

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

                    【讨论】:

                      【解决方案25】:

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

                      【讨论】:

                        【解决方案26】:

                        如果所有答案都不起作用,请使用此答案。我遇到了同样的问题!实际上,迁移文件夹中的 configuration.cs 文件丢失/删除。我确实删除了迁移文件夹,也确实从数据库中删除了迁移表。接下来在包管理器控制台 (PM) 中使用以下命令:

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

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

                        【讨论】:

                          【解决方案27】:

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

                          【讨论】:

                            【解决方案28】:

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

                            【讨论】:

                              猜你喜欢
                              • 2016-09-04
                              • 2020-12-15
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2011-08-16
                              相关资源
                              最近更新 更多