为啥 ASP.NET MVC 4 有这么多的 NuGet 包,哪些是真正重要的?

Posted

技术标签:

【中文标题】为啥 ASP.NET MVC 4 有这么多的 NuGet 包,哪些是真正重要的?【英文标题】:Why does ASP.NET MVC 4 have so many NuGet packages and which are truly important?为什么 ASP.NET MVC 4 有这么多的 NuGet 包,哪些是真正重要的? 【发布时间】:2012-08-13 08:01:30 【问题描述】:

正如标题所说,为什么 ASP.NET MVC 4 项目有这么多的 NuGet 包?现在整个框架都拆分成包了吗?对于将是网站、没有 API 等的空项目,哪些是真正重要的?

更新

为了澄清,我没有问题,除非你把基本的混淆算作一个。我只想知道为什么新的 MVC 4 项目默认安装了这么多包?一个空的项目有一整页的包。一个互联网项目包含三个完整页面的包。

我只是好奇为什么这是因为我当前的 MVC 3 项目最多使用五个包。

【问题讨论】:

我很好奇,为什么有很多 NuGet 包会成为问题?你想解决什么问题? 我没有说有问题。我只是安装了 MVC 4 并创建了一个新项目并四处寻找有什么不同。一个空的项目有一个完整的页面包,而互联网项目有三个完整的页面包。我只是想知道为什么会这样,因为我的 MVC 3 项目最多使用大约五个包。只是好奇。 我问这个问题是因为它可能会影响您收到的回复类型。 在programmers.stackexchange.com 上可能会更好?不过不确定... ASP.net 已经毫不掩饰他们希望将尽可能多的框架组件化,这允许他们将带外版本发布到框架的特定部分,而无需发布完整的补丁或次要版本更新,即在 MVC 4 中移至 JSON.net 的 JSON 框架可以独立于 MVC 进行更新,或者它们可以解决 API 的一部分中的错误/安全问题,而无需更新全部内容,这也使开发人员的生活更轻松,因为他们只必须在开发者机器和服务器上更新一个包而不是一个完整的 mvc 更新 【参考方案1】:

正如标题所说,为什么 ASP.NET MVC 4 项目有这么多的 NuGet 包?

这是一个你需要问框架设计者的问题。

对于将成为网站、没有 API 等的空项目,哪些是真正重要的?

这是允许您配置路由并使用呈现 Razor 视图的操作定义控制器的严格最低要求:

<packages>
  <package id="Microsoft.AspNet.Mvc" version="4.0.20710.0" targetFramework="net40" />
  <package id="Microsoft.AspNet.Razor" version="2.0.20710.0" targetFramework="net40" />
  <package id="Microsoft.AspNet.WebPages" version="2.0.20710.0" targetFramework="net40" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
</packages>

或者如果您只喜欢页面的 1/2:

【讨论】:

我想很公平。感谢您的信息。 ASP.NET Web Pages 2 Web 数据、数据和管理怎么样?我知道 ASP.NET Web PAges 2 (Core) 包含共享的 MVC 和 WebForms 功能,但那三个呢?它们是必需的还是更好的,它们究竟包含什么? 哦,抱歉,我现在看到 ASP.NET Web Helpers 引入了这些,它们不在默认的 Basic 模板中。【参考方案2】:

自 ASP.NET MVC 3 工具更新以来,越来越多的 ASP.NET MVC 通过 NuGet 包交付。这提供了几个优点:

升级到通过 NuGet 交付的组件 - MVC 本身和其他相关组件(Razor、Web API),而无需等待 ASP.NET MVC、.NET 或 Visual Studio 的新“大”版本。 这也意味着您可以在 MVC 之外随意使用各个部分 - 例如,可以在 ASP.NET 之外使用 Web API。 越来越多的组件在 UI 层和 ASP.NET 的其他部分之间共享。一些示例:路由与 Web 表单和网页共享,Razor 与网页共享,新的 OAuth 部分与 Web 表单共享。

您会注意到,在来自 Basic 模板的项目中,您将获得以下包:

Microsoft.AspNet.Mvc Microsoft.AspNet.Razor Microsoft.AspNet.WebApi Microsoft.AspNet.WebApi.Client Microsoft.AspNet.WebApi.Core Microsoft.AspNet.WebApi.WebHost Microsoft.AspNet.WebPages Microsoft.Net.Http Microsoft.Web.Infrastructure Newtonsoft.Json

九个中的五个用于 Web Api,它已高度组件化,使开发人员可以灵活地选择在何处以及如何使用它们。如果你想最小化你的 NuGet 包,你可以使用 Basic 模板。

当您升级到 Basic 和 Internet 模板时,您会看到更多的包来支持项目提供的附加功能。 Internet 引入了多个开源、非 Microsoft 代码包,例如 OAuth 和 javascript 库。

有很多 JavaScript 包,仔细想想,这是一件非常好的事情,因为这意味着 NuGet 会自动为你处理 JavaScript 依赖项——如果你想升级 jQueryUI,而这又需要一个新版本的jQuery,它会自动为你升级 jQuery。

【讨论】:

是不是说我不用再通过Web Platform Installer安装ASP.NET MVC4框架了? Visual Studio 2012 包含 MVC 4。如果您使用的是 2010,我建议在大多数情况下使用 Web PI。你可以使用一个空的 Web 应用程序和 NuGet 包创建一个 MVC 4 站点,但你还需要摆弄 web.config,你不会对 sn-ps 之类的东西有完整的 VS 支持。 不同意将所有 Javascript Nuget 包卡在“空”MVC 项目中是一件好事。我不想等到它通过 Nuget 发布后才升级到最新的 jquery 补丁级别,这可能会落后一年。我会自己更新它 - 它是一个文件,而 Nuget 只是碍事。 添加 javascript.. 我实际上讨厌将 nuget 包用于 jquery、angular、bootstrap 等。我个人认为将这些包包含在所有 Visual Studio 项目中是不好的设计,然后将它们全部托管在不同的网址上。尤其是在多站点/sso 系统中......为什么人们让用户下载他们的 jquery 副本 12 次浏览他们的生态系统?为什么他们没有内部 CDN 来保存用户数据计划(尤其是在这个新的移动时代)......只有我的 2 美分,但只是用这样的资产副本来填充 nuget 包......糟糕的代码气味。

以上是关于为啥 ASP.NET MVC 4 有这么多的 NuGet 包,哪些是真正重要的?的主要内容,如果未能解决你的问题,请参考以下文章

具有捆绑和缩小功能的 ASP.NET MVC 4 应用程序,为啥在调试模式下启用缩小?

为啥 ASP.NET MVC 中的超时时间很短?

ASP.NET-MVC5 - 为啥 Bootstrap v4 主题不能正确显示组件?

为啥要使用内联编码来开发 MVC ASP.NET?

为啥会收到奇怪的错误消息 asp.net mvc "elmah.mvc logging library"?

为啥 Asp.Net MVC 不在我的共享目录中搜索视图?