【问题标题】:Why is System.Web.Mvc not listed in Add References?为什么 System.Web.Mvc 未在添加引用中列出?
【发布时间】:2011-04-08 13:57:44
【问题描述】:

使用 C#,Visual Studio 2010。

在 MSDN 上记录了一个名为 System.Web.Mvc 的命名空间。该命名空间中所有类型的文档都说它们位于System.Web.Mvc.dll

但是,当我转到“添加引用”的“.NET”选项卡时,列表中缺少此程序集。为什么?

【问题讨论】:

  • 您能否澄清一下:如果没有该参考,您的项目是否可以工作?它在你的 web.config 中吗(见我的回答)?
  • 我没有从事任何项目。我只是想在 StackOverflow 上帮助某人。我通常添加一个参考来查看任何类型的 IntelliSense 和/或 F12。在这种情况下,列表中缺少所需的程序集,所以我问为什么。
  • 对本页读者的注意 - 截至今天 (2015-02-09) 解决此问题的方法随着时间的推移而改变 - 阅读所有答案 - 各种版本的 VS.NET 和 .NET 框架将 MVC 引用的代码移动到不同的地方。

标签: .net visual-studio assembly-references


【解决方案1】:

我相信您会发现在 web.config 文件中引用了 MVC 程序集,而不是在项目本身中。

类似这样的:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

回复您的评论;

我能给出的最佳答案来自here

add 元素添加一个程序集 编译时参考使用 动态资源。 ASP.NET 自动将此程序集链接到 编译每个代码时的资源 模块。

【讨论】:

  • 好的,将 XML 添加到 Web.config 可以,但不能回答问题。
  • "works" 因为它提供了智能感知?我已经编辑了我的答案
【解决方案2】:

“好的,将 XML 添加到 Web.config 工作,但它不回答 问题”

它应该在那里。默认情况下,添加引用列表似乎是有序的,但事实并非如此。点击名称标题并再次查看。

【讨论】:

  • 除非我确定,否则我不会经常说“列表中缺少此程序集”。
  • @Timwi 我想通了,但是给出了另一个答案,几乎没有安装 vs 2010 的可能性,而且在我的情况下,我总是在参考列表中找到我需要的东西没有点击名称标题我不得不说它......事实上,我现在知道为什么我之前和在 2010 年我都不需要 - 请参阅第一条评论:weblogs.asp.net/scottgu/archive/2009/10/29/…
  • 那么您是说单击名称标题会为您排序吗?在我的机器上什么都不做......
  • @romkyns 它仅在列表中的所有程序集都加载后才有效。
【解决方案3】:

所需的程序集现已出现在列表中。

我只能推测是什么导致它出现,但我怀疑是我去了 FileNewProjectASP.NET Web 应用程序,这是我以前从未做过的。这可能会导致发生某种延迟初始化,并且列表中会填充用于 Web 开发的其他程序集。

【讨论】:

  • 它肯定总是在那里,没关系:P ...请参阅我添加到我的答案中的评论,在链接中它说:“.net 选项卡的问题是异步正在发生并且它正在刷新,它没有按字母顺序排序......”......这是vs 2010的新行为,直到我看到你的问题,我才意识到这一点。
  • @egl 我刚刚在我的机器上进行了测试(VS2010),它根本不在列表中。根据目标框架,我确实得到了不同的程序集集,但这个永远不会存在。
  • @romkyns 尝试定位 .net 4,并按照我在回答中提到的操作。还要确保给它足够的时间来加载,因为它是异步加载的。
【解决方案4】:

检查这些步骤:

  1. 检查 MVC 是否安装正确。
  2. 检查项目的属性,看看项目的目标框架是什么。如果目标框架未设置为 .Net Framework 4,请进行设置。

注意:如果目标框架设置为 .Net Framework 4 Client Profile,它不会在引用列表中列出 MVC 引用。您可以在 .Net Framework 4 和 .Net Framework 4 Client Profile here 之间找到不同之处。

.NET Framework 4 客户端配置文件是 .NET Framework 4 的子集,针对客户端应用程序进行了优化。它为大多数客户端应用程序提供功能,包括 Windows Presentation Foundation (WPF)、Windows 窗体、Windows Communication Foundation (WCF) 和 ClickOnce 功能。这为面向 .NET Framework 4 客户端配置文件的应用程序提供了更快的部署和更小的安装包。

【讨论】:

  • 这是一个很好的提示。当我转到项目的属性时,它只列出了 .NET Core 1 和 2。没有 .NET Framework 4.x。我的列表中缺少程序集。原来这就是我构建项目的方式——我选择了错误的选项——使用 .NET Core 而不是 .NET Framework。现在我知道区别了。 :)
【解决方案5】:

我遇到了同样的问题,无法找到 System.Web.MVC 参考程序集。

终于找到了,它位于以下位置。

请注意,如果您的 VS 安装在 C 中:(有时 MVC.dll 不在大家谈论的默认位置,我的意思是位于 C: 驱动器中的“Reference Assemblies”文件夹.)

如果它不在那里,它肯定应该在这里:

\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

所以通过导航或添加引用菜单中的浏览选项卡来添加dll。

【讨论】:

  • 这得到了我的参考,虽然我确信我之前已经通过框架程序集列表添加了这个参考。
  • 如果您在使用 VCS 的团队中工作,这不是一个很好的解决方案。在这种情况下,绝对路径是邪恶的。
  • 完全同意,由于硬编码的绝对路径依赖性,这在任何类型的团队开发环境中都是一个糟糕的解决方案。
  • 解决这个问题的方法是确保每个人都使用相同的 DLL 路径。如果所有团队成员都在该位置安装了程序集,这应该不是问题,因为他们应该这样做。或者,可以从该路径复制 DLL,并将其直接放入项目中,因此它具有相对路径。但无论哪种方式,只要知道该 DLL 所在的位置,都是一个很好的起点。
  • 这真的很有帮助;但微软应该让这变得更加干净和容易......
【解决方案6】:

我遇到了同样的问题,这是一个有趣的原因:我猜你希望System.Web.Mvc 位于列表中的System.Web 之下。但该列表不是按字母顺序排列的。

首先对列表进行排序,然后查看System.Web附近。

【讨论】:

  • 还要确保您获得的是正确的版本。就我而言,System.Web.Mvc v2 和 v4 都在那里,而且它们也不相邻。
  • 出于同样的原因在查找 System.Web.Mvc 时遇到了同样的问题。我改用 Microsoft.AspNet.Mvc,确保检查我的解决方案中的其他项目在版本号方面使用了什么。
【解决方案7】:

这在 Visual Studio 2012 中发生了变化(我知道最初的问题是 VS2010,但标题仍然会在搜索中出现)。

当您创建 VS2012 MVC 项目时,system.web.mvc 被放置在与解决方案对等的 packages 文件夹中。默认情况下会在 web 项目中引用,您可以在那里找到确切的路径。

如果您想在辅助项目中引用它(比如带有过滤器或其他属性的支持 .dll),那么您可以从那里引用它。

【讨论】:

    【解决方案8】:

    您也可以从 Nuget 包管理器控制台添加它,例如:

    Install-Package Microsoft.AspNet.Mvc -Version 4.0.20710.0 -ProjectName XXXXX
    

    Microsoft.AspNet.Mvc 依赖于:

    • 'Microsoft.AspNet.WebPages (≥ 2.0.20710.0 &&
    • 'Microsoft.Web.Infrastructure (≥ 1.0.0.0)'
    • 'Microsoft.AspNet.Razor (≥ 2.0.20710.0 &&

    ...这对我来说似乎没什么大不了的。在我们的例子中,这是一个仅用于为我们的 Mvc 应用程序提供支持的类库。所以,我们认为它在最坏的情况下是一种良性依赖。

    我绝对更喜欢指向文件系统或 GAC 中的程序集,因为与我在 GAC 和文件系统程序集引用中的经验相比,将来更新包可能会少很多痛苦过去。

    【讨论】:

    • 我使用了这种方法,我同意在引用中不使用本地绝对路径。我使用了 NuGet 包管理器,添加包和依赖项解决了我的 VS2015-only 盒子上的问题。
    【解决方案9】:

    在 VS Express 2012 中,我在“程序集”选项卡中找不到 System.Web.Mvc,但经过一番搜索,我发现我需要查看“程序集\扩展 " 选项卡而不是默认的 "程序集\框架" 选项卡。

    【讨论】:

    • 为您+1,因为您找到了我遇到的问题的根本原因。我选择使用下面禁止的 NuGet 安装方法,我会在那里评论我所做的。
    • 我在 Visual Studio Community 2015 中尝试过这种方法,但我遇到了与版本不兼容有关的运行时错误 (Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference)。我的解决方案中有另一个项目引用了不同的版本,这种方法只允许我添加对 System.Web.Mvc 的引用,Version=4.0.0.0。 NuGet安装方法添加了正确的版本
    【解决方案10】:

    最好的方法是使用 NuGet 包管理器。

    只需更新下面的 MVC 包,它应该可以工作。

    【讨论】:

    • 我必须承认,在大多数情况下,这是添加对 MVC 的引用的正确方法(它应该可以避免在 Visual Studio 之外运行应用程序时出现错误引用可能导致的问题)。但是在已经包含 MVC 一些项目的大型解决方案中,使用“管理 NuGet 包以解决方案”来安装相同版本的库会更好。原因是,如果你只是从 NuGet 包管理器安装它们,你可能会遇到版本不兼容的问题(管理器通常会为你提供最新版本)。
    • 我已将该解决方案用于无法使用 Visual Studio 2015 编译的使用 MVC 4 的项目。它还确保项目库在所有开发人员中都是统一的。
    • 我在一个只有 VS2015 的盒子上遇到了这个问题,而其他团队成员有 VS2013 - 这可能让他们在我没有代码的情况下引用旧位置(没有构建错误)并构建错误。值得注意的是,截至今天,我找不到 Microsoft.Web.Mvc - 这是导致问题的参考。在@forderah 的回答中,揭示了 NuGet 中名称不同的事实。 Microsoft.Web.Mvc 现在是 Microsoft.AspNet.Mvc,它还引入了他/她的答案中列出的依赖项。
    • 我什至在 VS2017 中也遇到了这个问题,这解决了它。不知道为什么VS2017告诉我它认为需要引用的程序集是System.Web.Mvc,而它实际上是在寻找Microsoft.AspNet.Mvc
    【解决方案11】:

    我通过搜索“mvc”解决了这个问题。 System.Web.Mvc 出现在搜索结果中,尽管它不包含在列表中。

    【讨论】:

      【解决方案12】:

      可以分开安装, 它不包含在框架中, 选择选项卡列表“扩展”,它存在还有更多其他库, 一切都好不需要使用旧的库等, 存在旧 20 30 和 4001

      【讨论】:

        【解决方案13】:

        如果您在 Visual Studio 2017 中遇到此问题,则很可能您正在使用在以前版本的 VS 中创建的 MVC 4 项目,其参考提示路径指向 C:\Program Files (x86)\Microsoft ASP.NET。 Visual Studio 2017 不再安装此目录。

        我们通常通过在 2017 实例旁边安装 Visual Studio 2015 的副本来解决此问题,并在上​​述路径中安装必要的库。然后我们更新受影响项目中的所有引用,我们就可以开始了。

        【讨论】:

          【解决方案14】:

          我在 VS 2012 中没有得到 System.Web.Mvc,但我在 VS 2013 中得到了它。 使用 AddReference 对话框,

          或者,您可以在项目路径中找到它,

          YourProjectName\packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\System.Web.Mvc.dll

          【讨论】:

          • 很好的提示,显示在现有项目路径中的位置。谢谢!
          猜你喜欢
          • 2017-03-28
          • 2018-01-25
          • 1970-01-01
          • 2016-01-13
          • 2014-10-31
          • 1970-01-01
          • 2013-06-15
          • 1970-01-01
          • 2016-12-21
          相关资源
          最近更新 更多