ASP.NET MVC学习之NuGet在VS中的运用浅谈

为什么要使用NuGet

简单的说NuGet可以是我们的工作更方便,当我们的项目里要引用到的一些库时候,比如JQuery、Newtonsoft.Json、log4net等,我们需要从网上下载这些库,然后依次拷贝到各个项目中,当有的类库有更新时又不得不再重复一遍很是繁琐 ,这时就可以考虑使用NuGet来帮我们管理和更新这些类库,而且更新类库时会自动添加类库的相关引用,方便至极。当然网上一些我们常用的类库更新频率不是很高而且即便出了新版本我们也没必要总是保持最新,故这点对我们的帮助比较有限,个人认为NuGet最大的好处在于可以搭建自己的类库服务器,想想一下吧,在一些较大些的公司里面有很多的项目,然后其中有一些是整个组,甚至整个公司通用的类库,当这些类库有更新后我们需要依次拷贝到我们的项目,甚至于有时候我们自己都搞不清楚各个项目里的版本是否一致,有时偶尔一两个项目忘了复制更新出现莫名其妙的错误,为此头疼不已,现在有了NuGet,世界从此而不同。

一 概述

在我们讲解NuGet前,我们先来看看一个例子。

1.例子:

假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们需要引入Bootstrap相关文件,大致会执行如下操作。

步骤一:下载Bootstrap文件

输入Bootstrap官网域名 http://v3.bootcss.com/

输入域名,进入官网

步骤二:选择合适的版本,下载Bootstrap包

步骤三:将包引入到项目中

关于将Bootstrap包引入到Project中,过程似乎比较麻烦,更可怕的的是,当在项目中的Bootstrap包需要更新时,需要做重复的工作,这是非常繁琐的,很好的是,VS自带的NuGet包管理器很好地

帮助我们解决了此类问题。

2.何为Nuget包管理器?

对于.NET和VS而言,NuGet是一个.NET包管理系统,它可以很容易地响应运用程序中添加、更新和删除外部库文件及其依赖。

除此之外,我们可以通过创建包,发布包实现包之间的共享,使共享得以实现。

站在微软的角度:要尽可能地尝试,不要指望Microsoft为我们提供所需要的每一段代码,在.NET平台上进行开发的开发人员多大数百万甚至上千万,而每一个开发人员都有其独特的技术和有待解决

的问题,等待Microsoft去解决每个开发人员的每个问题,既形不成规模,也没有意义。值得庆幸的是,他们可以通过网上发布的一些库莱解决他们或他们客户遇到的问题。然而,面对网上的这些有

用的库我们面临三大挑战:发现,安装和维护。但庆幸的是,NuGet却很好地解决了此类问题。

二 将包添加到库

将包添加到库,有许多方式,常用方式为Manage NuGet Package 和 Package Manager Console,下面将结合VS2017和基于ASP.NET MVC模板讲解该两种方式。

(一)Manage NuGet Packages

1.准备好VS2017开发环境,并用VS的MVC模板创建一个默认项目:NuGetDemo

分析:

细心的你会发现,在上图中出项了packages.config文件,其实,它就是NuGet包的配置文件,因为我们在选择基于MVC模板创建项目时,默认的引入了第三方库文件,如Bootstrap,Jquery等;

2.打开NuGet包管理器

引用=>管理Nuget程序包

3.打开NuGet包管理器后,我们可执行如下操作

(1)浏览包 (2)查看当前系统已安装包 (3)更新包 (4)在搜索框中搜索包

4.查看包的详细信息

我们以log4net为例

分析:

包的基本信息

5.安装

在安装AnyLog.Log4Net之前,先选择好安装版本,然后再安装。

6.查看安装情况

(1)查看控制台输出安装信息情况

(2)查看NuGet包已安装情况

(3)查看项目引用情况

(4)查看packages.config文件

7.更新包

NuGet包管理器不仅能帮助我们安装包,而且还能帮助我们维护包,我们可以借助NuGet包管理器来更新包。

注意:当我们更新包时,这个操作也会更新该包的所以依赖,以确保只安装依赖的兼容保本。

在以下例子中,我们在项目NuGet中安装了Log4net 2.0.3版本,现在,我们将其更新都最新版本2.0.8,选择“更新”。

点击确认。

注意,此步会更新运用程序中与Log4net相关所有内容。

查看更新结果

8.包恢复

NuGet默认的工作流程是把包文件夹提交到版本控制,这样做的一个好处是可从版本控制检索解决方案,以确保构建解决方案的每个包都能够安装,而且这些包还不需要从其他位置检索。

但是,这样做也是有弊端的,Packages文件夹不是VS解决方案的一部分,因此,通过VS集成管理版本控制的开发人员需要进行一个额外的步骤以确保Packages文件夹能够提交。

(1)TFS可以自动提交Packages文件夹

(2)分布式版本控制系统(如Git),不建议把Packages文件夹提交到版本控制,因为分布式版本控制系统不擅长处理二进制文件,如果项目中大量的包都有变化,分布式版本控制系统库就会

变得很庞大。

可喜的是,NuGet 1.6引入的包修复功能来处理这些问题,这样就支持一个新的个工作流程,我们就不需要把Packages文件夹提交到源代码控制了。

这个过程需要手动执行几个步骤:对每个项目都需要执行单独的一步操作,以启用包恢复(在NuGet2.0~2.6中,每个开发人员还需要配置VS来允许包恢复)

注意:

现在NuGet包恢复时自动启用的,但是在VS的Package Manager设置中使用下面两个选项,可以禁用包恢复功能:

a.允许NuGet下载缺少包;

b.在VS中构建运用程序时,自动检查缺少的包;

通过NuGet 2.7 自动包恢复功能。

(二)Package Manager Console

Package Manager Console是Visual Studio 中基于PowerShell的控制台,不仅提供了强大的功能来查找和安装包,而且还支持Manager NuGet Packages对话框不支持的一些功能。

1.启动控制台

工具=>NuGet包管理器=>程序包管理器控制台

2.查看当前项目已安装的包

在控制台中输入Get--Package,可以查看当前项目已安装的包

拓展:

(1)以前版本,可以通过以下命令来过滤包

Get-Package -ListAvailable -Filter Route

(2)可以采用如下命令代替Get-Package -ListAvailable -Filter 命令

Find-Package [-Id]

3.安装包

在控制台中通过:Install-Package 包名

下图中,我们在项目中安装Log4net,因此输入Install-Package Log4net,由于我已在项目中安装了Log4net,因此提示已经安装。

拓展:

(1)PowerShell命令的支持扩展功能,相当于智能感应。输入命令部分字符,按Tab键就可以查看输入的内容,从而实现智能感应。

(2)PowerShell支持复合命令,比如通过将一个命令管道传输到另一个命令。

如下命令向解决方案中每一个项目安装一个包。

Get-Project -ALL | Install-Package log4net

(3)PowerShell也支持动态添加新命令

PowerShell强大之处在于,安装的一些包可以为shell添加新命令。

(三)其他方式启动NuGet

如在项目名称中添加,这里不论述,核心内容还是在如上的(一)和(二)部分。

4.关于包源和项目的选择

通过选择程序包源右边的齿轮,即可查看该包及对包的基本操作

5.NuGet包管理器概述

(1)NuGe包管理器基本界面

在控制台操作中,由两大部分组成:常规和程序包源

(2)程序包源概述

拓展:

在Manage NuGet Packages 操作包方式中,与如上对应的操作

例子讲解:

下面我们讲解基于如上两种模式添加autofac包的操作过程

Manage NuGet Packages 方式

控制台操作方式

(1)找到autofac包的NuGet地址

(2)添加autofac包

三 创建包

篇幅有限,以后专门写一篇文章概述......

四 发布包

篇幅有限,以后专门写一篇文章概述......

五 参考文献

【01】ASP.NET MVC5 高级编程(Jon Galloway,Brad Wilson,K.Scott Allen,David Matson ,孙远帅 译)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • ASP.NET MVC学习之NuGet在VS中的运用浅谈

    为什么要使用NuGet 简单的说NuGet可以是我们的工作更方便,当我们的项目里要引用到的一些库时候,比如JQuery.Newtonsoft.Json.log4net等,我们需要从网上下载这些库,然后依次拷贝到各个项目中,当有的类库有更新时又不得不再重复一遍很是繁琐 ,这时就可以考虑使用NuGet来帮我们管理和更新这些类库,而且更新类库时会自动添加类库的相关引用,方便至极.当然网上一些我们常用的类库更新频率不是很高而且即便出了新版本我们也没必要总是保持最新,故这点对我们的帮助比较有限,个人认为N

  • ASP.NET MVC学习教程之Razor语法

    前言 ASP.NET MVC 3配有一个新的名为"Razor"的视图引擎选项(除了已有的.aspx视图引擎).Razor尽量减少编写一个视图模板需要敲入的字符数,实现快速流畅的编程工作流.与大部分模板的语法不同,你不必在HTML中为了明确地标记出服务模块的开始和结束而中断编程.Razor解析器足够聪明,能从你的代码中推断出来.这使其简洁,富有表现力的语法输入干净,快速,有趣.下面话不多说了,来一起看看详细的介绍吧 1. 表达式 表达式必须跟在"@"符号之后, 2.代

  • ASP.NET MVC学习笔记

    网上关于ASP.NET MVC的系列教程有好几个,所以就不从头开始介绍了,结尾处给大家推荐了几个链接,需要的话可以从头系统的看看. 1.ASP.NET MVC介绍及与ASP.NET WebForm的区别 刚开始为了搞清楚ASP.NET MVC到底值不值得用,翻来覆去想了一个多礼拜,看了好多资料和评论,最后决定还是值得一用.MVC不是一个简单的设计模式,更像一种架构模式,或者一种思想,刚开始一听MVC想到的就是模板引擎,NVelocity,StringTempleate等,但感觉如果只是为了用模板

  • Asp.Net MVC学习总结之过滤器详解

     一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的逻辑.提供了一个简单而优雅的方式来实现横切关注点. 2.所谓的过滤器(Filters),MVC框架里面的过滤器完全不同于ASP.NET平台里面的Request.Filters和Response.Filter对象,它们主要是实现请求和响应流的传输.通常我们所说的过滤器是指MVC框架里面的过滤器. 3.过滤器可以注入一些代码逻辑到请求处理管道中,是基于C#的Attribute的实现.当负责调用Act

  • 基于ASP.NET MVC的ABP框架入门学习教程

    为什么使用ABP 我们近几年陆续开发了一些Web应用和桌面应用,需求或简单或复杂,实现或优雅或丑陋.一个基本的事实是:我们只是积累了一些经验或提高了对,NET的熟悉程度. 随着软件开发经验的不断增加,我们发现其实很多工作都是重复机械的,而且随着软件复杂度的不断提升,以往依靠经验来完成一些简单的增删改查的做法已经行不通了.特别是用户的要求越来越高,希望添加的功能越来多,目前这种开发模式,已经捉襟见肘.我很难想象如何在现有的模式下进行多系统的持续集成并添加一些新的特性. 开发一个系统时,我们不可避免

  • ASP.NET MVC模式简介

    目录 一.MVC模式简介 1.MVC在Web框架中的应用 2.执行顺序 二.ASP.NET中的MVC 1.ASP.NETMVC和ASP.NET 2.ASP.NETMVC和WebForms 三.创建ASP.NETMVC 1.选择文件->新建->项目 2.选择.NETFramework版本的ASP.NETMVC 3.配置项目名称和路径 3.1.选择一种应用程序模板 3.2.测试 3.3.配置身份验证 一.MVC模式简介 MVC模式是一种流行的Web应用架构技术,它被命名为模型-视图-控制器(Mod

  • Asp.net MVC中Razor常见的问题与解决方法总结

    前言 最近在学习Asp.net MVC Razor,在使用中遇到了不少的问题,所以想着总结下来,没有经验的童鞋就是这样磕磕碰碰出来的经验.话不多说,来一起看看详细的介绍: 一.Datatype的错误提示消息无法自定义 这也许是Asp.net MVC的一个Bug.ViewModel中定义了DataType为Date字段: [Required(ErrorMessage = "Birthday must be input!")] [DataType(DataType.Date, ErrorM

  • ASP.NET MVC的四种验证编程方式

    我们可以采用4种不同的编程模式来进行针对绑定参数的验证. 一.手工验证绑定的参数 在定义具体Action方法的时候,对已经成功绑定的参数实施手工验证无疑是一种最为直接的编程方式,接下来我们通过一个简单的实例来演示如何将参数验证逻辑实现在对应的Action方法中,并在没有通过验证的情况下将错误信息响应给客户端.我们在一个ASP.NET MVC应用中定义了如下一个Person类作为被验证的数据类型,它的Name.Gender和Age三个属性分别表示一个人的姓名.性别和年龄. public class

  • 基于asp.net MVC 应用程序的生命周期(详解)

    首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢? 本文我们会详细讨论MVC应用程序一个请求的生命周期,从一个控件到另一个控件是怎样被处理的.我们还会详细介绍一下整个请求的生命周期中,用到的相关组件.因为在平常的开发过程中,我们可能知道怎样去使用MVC框架来处理相关的请求,大部分的时候我们只是在controller和action方法之间做相关的处理,对于真正内在的运行机制可能不是很了解.其实

  • 详解ASP.NET MVC的整个生命周期

    目录 一.介绍 二.MVC生命周期详述 View的初始化和渲染呈现 三.结束 一.介绍 我们做开发的,尤其是做微软技术栈的,有一个方向是跳不过去的,那就是MVC开发.我相信大家,做ASP.NET MVC 开发有的有很长时间,当然,也有刚进入这个行业的.无论如何,如果有人问你,你知道ASP.NET MVC的生命周期吗?你知道它的来世今生吗?你知道它和 ASP.NET WEBFORM 有什么区别吗?估计,这些问题,有很多人会答不上来,或者说不清楚.今天,我就把我的理解写出来,也是对我自己学习的一次回

随机推荐