作者:小5聊
简介:一只喜欢全栈方向的程序员,专注基础和实战分享,欢迎咨询,尽绵薄之力答疑解惑!
1、Nuget函数库管理工具
1.1、什么是Nuget
Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。
在使用Visual Studio 或.NET CLI开发基于.NET 或.NET Framework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。
说白了,就是一个dll函数库文件管理平台,类似一些代码管理平台一样。
温馨提示:因为只是存在dll文件,所以建议大家还是尽量保留自己的源代码,方便以后版本升级更新,不然找不到源代码就很尴尬了
1.2、为什么会有Nuget
先分析下,目前使用的大多数函数库,也就是类和类方法,一部分是自己项目本身添加的类和方法,一部分是通过引用第三方的类,所以会存在以下这些情况
1)版本问题
为什么会出现版本的概念,因为一个模块的功能是会随着时间而改进优化,所以为了兼容和区别以前的代码就做了一个区别,特别是面向大众化的函数库,
举个栗子,假如你的第一个版本方法名叫WayOne,过了半年,你把方法改为了WayTwo,结果别人引用你的方法WayOne找不到了,这就很离谱了。
2)dll管理问题
在nuget没有出来之前,引用第三方库是需要我们自己管理,并且还是记住他的版本号,不然引用版本不正确,也是无法使用,
有可能你的项目升级了,但是还是用了以前的第三方库版本不一致也是无法使用,还有可能你忘记把第三方库的dll提交
3)总结
基于上面的问题痛点,所以Nuget的出现就是来解决这些问题的
2、VS打开Nuget界面
Nuget是一个VS的扩展插件。我们在使用VS开发时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。
2.1、鼠标右键引用或者依赖项
第一种打开方式,选择管理NuGet程序包(N)
2.2、工具菜单栏打开
第二种打开方式,点击VS顶部菜单栏,选择工具,在弹出菜单里选择【NuGet】包管理器
2.3、程序包管理器控制台
可以通过控制台,命令式输入引用项目的名称和版本,这个也是非常方便,习惯使用命令的小伙伴就非常熟悉了。
可以指定程序包源和指定安装在那个项目,特别要注意哦,特别是在项目特别多的时候,容易选错了
2.4、管理解决方案的NuGet程序包
使用非常简单,直接在搜索文本框输入目标函数库名称即可,右边还会有函数库对应的版本选择,非常方便,以后再也不用担心第三方库找不到了
2.5、程序包管理设置
3、创建项目
3.1、数据库访问功能
创建一个数据库访问的公共功能,封装常用的增删改查方法,直接设计单例模式调用访问
3.2、项目命名
给项目取个名字,之后生成的dll就是使用这个名字,所以需要提前想好命名。
这里选择的框架是.NET Framework 4.7.2,以及控制台应用,虽然是老框架,但这里仅做例子使用
4、封装数据库访问功能
这里访问的数据库是sql server,后续也会封装调用mysql、oracle等数据库,并计划把源码存放到C占代码管理平台上
4.1、添加数据库访问类
使用.NET框架自带的ORM框架类进行封装,就是所谓的ADO.NET,常用的类,也是刚步入职场面试官经常会问到的
1)SqlConnection,连接类
2)SqlCommand,sql语句执行类
3)SqlDataAdapter,数据装载类
- 定义一个静态全局变量
public static readonly string connectionString = "server=服务器地址;database=数据库名称;User ID=账号;password=密码";
- 增删改关键代码
public static int ExecuteNonQuery(string sql, params SqlParameter[] ps)
{
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (ps != null)
{
cmd.Parameters.AddRange(ps);
}
con.Open();
return cmd.ExecuteNonQuery();
}
}
}
- 查询关键代码
public static DataTable ExecuteTable(string sql, params SqlParameter[] ps)
{
DataTable dt = new DataTable();
using (SqlDataAdapter sda = new SqlDataAdapter(sql, connectionString))
{
if (ps != null)
{
sda.SelectCommand.Parameters.AddRange(ps);
}
sda.Fill(dt);
}
return dt;
}
- DataTable转实体类关键代码
public static List<T> TableToList<T>(DataTable dt) where T : class, new()
{
Type type = typeof(T);
List<T> list = new List<T>();
foreach (DataRow row in dt.Rows)
{
PropertyInfo[] properties = type.GetProperties();
T model = new T();
foreach (PropertyInfo p in properties)
{
object value = row[p.Name];
if (value == DBNull.Value)
{
//p.SetValue(model, "", null);
}
else
{
if (value is decimal)
{
p.SetValue(model, Convert.ToInt32(value), null);
}
else
{
p.SetValue(model, value, null);
}
}
}
list.Add(model);
}
return list;
}
5、登录Nuget
5.1、Nuget地址
2)登录或注册账号
这里可以使用微软账号,如果没有就直接注册一个新的账号,操作都是非常简单
5.2、获取API密钥
1)完成登录后,首页点击右上角账号昵称
2)选择API Keys选项
3)创建API Key
点击Create,会展开填写信息,API Keys是有有效期的,过了有效期也是可以针对当前项目进行刷新Key值
4)完成创建
点击Copy按钮,复制保存key值,用于上传
5)刷新有效期
点击Regenerate能够刷新key的有效期
6、打包项目和发布
在完成简单例子功能后,接下来就是打包和上传到管理平台
6.1、下载Nuget.exe
下载地址:NuGet Gallery | Downloads
6.2、版本选择
博主这里选择的是nuget.exe v6.4.0,可能下载速度会慢一点
6.3、放到项目根目录
将上步骤下载到的nuget.exe程序放到您当前创建的项目根目录下
6.4、鼠标右键没有看到打包选项
如果发现项目属性鼠标右键,弹出来的菜单或属性页没有打包选项,那么就需要先点击生成选项页。
这个是因为framework框架没有的选项,之后的.net core框架才有。
6.5、命令式打包
1)cmd先定位到项目根目录
cd 您的项目根目录地址
cd C:\Users\Administrator\source\repos\Xpp\Xpp
2)先创建文件信息
格式:nuget + spec + 项目名
创建成功后,会生成一个.nuspec的文件,打开文件编辑修改一些打包参数信息
nuget spec XppHelper
3)填写打包信息
直接把文件拖进来编辑,或者文本文档都可以编辑。需要补充files标签,默认没有
version=版本号,根据实际情况填写
description=包说明描述
relaseNates=当前版本变更信息说明,本次修改了或增加了那些主要功能
4)打包命令
nuget pack XppHelper.nuspec
必须要填写对相关信息,否则会打包失败
5)打包成功
7、上传
7.1、命令上传
nuget.exe push Xpp.1.0.0.nupkg -Source https://www.nuget.org
7.2、提示没有API Key
会提示输入用户名和密码
7.3、设置API Key值
如果账号密码忘记了,只记得有key值,那么可以通过命令设置key值
格式:nuget setApiKey 你的key值
nuget setApiKey yourkey
7.4、再次上传
推送失败,项目名称和Nuget创建的不一致
修改后,推送成功
7.5、引用线上库
打开Nuget包管理器,输入自己的项目名称,刚上传大概要1~10分钟左右。
可以根据以下搜索出来的界面信息,对照填写的参数信息
8、常见问题
8.1、找不到包
1)问题
在以下主源中找不到包“XppHepler 1.0.5”:“https://api.nuget.org/v3/index.json”。请验证你的所有联机包源是否都可用,以及是否正确指定了包 ID、版本
2)解决方案
工具》选项》NuGet包管理器》常规》点击清除所有NuGet缓存
9、总结
Nuget推荐使用“.NET Standard”作为目标框架
到此,整个函数库封装打包上传就完成了,有疑问的地方可咨询,或不足的地方望指教,感谢您的阅读!