ChatGPT解决这个技术问题 Extra ChatGPT

为什么 System.Web.Mvc 未在添加引用中列出?

使用 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 引用的代码移动到到不同的地方。

s
sandeep talabathula

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

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

https://i.stack.imgur.com/SKtro.jpg


我不得不承认,在大多数情况下,这是添加对 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
我会更进一步,说您需要为解决方案管理软件包。如果您右键单击一个项目并选择“管理 NuGet 包...”,那么它将仅适用于该项目。如果您右键单击解决方案并选择“管理解决方案的 NuGet 包...”,那么您将看到为解决方案中的所有项目安装了哪些包 - 以及哪个版本。在我们的案例中,我们混合了不同版本号和未安装在引用它们的项目中的包。从这里我们安装了“Microsoft.AspNet.Mvc”(由 MS)。
j
jahu

在 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 安装方法添加了正确的版本
P
Patrick Hofman

我遇到了同样的问题,无法找到 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 所在的位置,都是一个很好的起点。
这真的很有帮助;但微软应该让这变得更加干净和容易......
f
fordareh

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

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

Microsoft.AspNet.Mvc 依赖于:

'Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && < 2.1)'

'Microsoft.Web.Infrastructure (≥ 1.0.0.0)'

'Microsoft.AspNet.Razor (≥ 2.0.20710.0 && < 2.1)'

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

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


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

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

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


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

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


e
eglasius

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

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


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

检查这些步骤:

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

注意:如果目标框架设置为 .Net Framework 4 Client Profile,它不会在引用列表中列出 MVC 引用。您会发现 .Net Framework 4 和 .Net Framework 4 客户端配置文件 here 之间存在差异。

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


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

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

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


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

这对于 Visual Studio 2012 已经改变(我知道最初的问题是 VS2010,但标题仍然会在搜索中出现)。

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

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


M
Md Shahriar

https://i.stack.imgur.com/o62Fa.jpg

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

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


很好的提示,显示在现有项目路径中的位置。谢谢!
B
Basic

我相信您会发现在 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 可以,但它不能回答问题。
“有效”,因为它提供了智能感知?我已经编辑了我的答案
u
user1005462

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


J
J.D. Mallen

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

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