【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器

奋斗吧
奋斗吧
擅长邻域:未填写

标签: 【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器 Python博客 51CTO博客

2023-04-05 18:23:48 124浏览

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器,作者:小5聊简介:一只喜欢全栈方向的程序员,专注基础和实战分享,欢迎咨询,尽绵薄之力答疑解惑!1、Nuget函数库管理工具1.1、什么是NugetNuget是一个.NET平台下的开源的项目,它是VisualStudio的扩展。在使用VisualStudio或.NETCLI开发基于.NET或.NETFramework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方


作者:小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)

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#

2.2、工具菜单栏打开

第二种打开方式,点击VS顶部菜单栏,选择工具,在弹出菜单里选择【NuGet】包管理器

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#_02

2.3、程序包管理器控制台

可以通过控制台,命令式输入引用项目的名称和版本,这个也是非常方便,习惯使用命令的小伙伴就非常熟悉了。

可以指定程序包源和指定安装在那个项目,特别要注意哦,特别是在项目特别多的时候,容易选错了

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_开发语言_03

2.4、管理解决方案的NuGet程序包

使用非常简单,直接在搜索文本框输入目标函数库名称即可,右边还会有函数库对应的版本选择,非常方便,以后再也不用担心第三方库找不到了

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_函数库_04

2.5、程序包管理设置

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_.net_05

3、创建项目

3.1、数据库访问功能

创建一个数据库访问的公共功能,封装常用的增删改查方法,直接设计单例模式调用访问

3.2、项目命名

给项目取个名字,之后生成的dll就是使用这个名字,所以需要提前想好命名。

这里选择的框架是.NET Framework 4.7.2,以及控制台应用,虽然是老框架,但这里仅做例子使用

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_函数库_06

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地址

1)NuGet Gallery | Home

2)登录或注册账号

这里可以使用微软账号,如果没有就直接注册一个新的账号,操作都是非常简单

5.2、获取API密钥

1)完成登录后,首页点击右上角账号昵称

2)选择API Keys选项

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_函数库_07

3)创建API Key

点击Create,会展开填写信息,API Keys是有有效期的,过了有效期也是可以针对当前项目进行刷新Key值

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_上传_08

4)完成创建

点击Copy按钮,复制保存key值,用于上传

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_开发语言_09

5)刷新有效期

点击Regenerate能够刷新key的有效期

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_函数库_10

6、打包项目和发布

在完成简单例子功能后,接下来就是打包和上传到管理平台

6.1、下载Nuget.exe

下载地址:NuGet Gallery | Downloads

6.2、版本选择

博主这里选择的是nuget.exe v6.4.0,可能下载速度会慢一点

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#_11

6.3、放到项目根目录

将上步骤下载到的nuget.exe程序放到您当前创建的项目根目录下

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#_12

6.4、鼠标右键没有看到打包选项

如果发现项目属性鼠标右键,弹出来的菜单或属性页没有打包选项,那么就需要先点击生成选项页。

这个是因为framework框架没有的选项,之后的.net core框架才有。

6.5、命令式打包

1)cmd先定位到项目根目录

cd 您的项目根目录地址

cd C:\Users\Administrator\source\repos\Xpp\Xpp

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_上传_13

2)先创建文件信息

格式:nuget + spec + 项目名

创建成功后,会生成一个.nuspec的文件,打开文件编辑修改一些打包参数信息

nuget spec XppHelper

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#_14

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_函数库_15

3)填写打包信息

直接把文件拖进来编辑,或者文本文档都可以编辑。需要补充files标签,默认没有

version=版本号,根据实际情况填写

description=包说明描述

relaseNates=当前版本变更信息说明,本次修改了或增加了那些主要功能

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_函数库_16

4)打包命令

nuget pack XppHelper.nuspec

必须要填写对相关信息,否则会打包失败

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_上传_17

5)打包成功

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#_18

7、上传

7.1、命令上传

nuget.exe push Xpp.1.0.0.nupkg -Source https://www.nuget.org

7.2、提示没有API Key

会提示输入用户名和密码

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_开发语言_19

7.3、设置API Key值

如果账号密码忘记了,只记得有key值,那么可以通过命令设置key值

格式:nuget setApiKey 你的key值

nuget setApiKey yourkey

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#_20

7.4、再次上传

推送失败,项目名称和Nuget创建的不一致

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_函数库_21

修改后,推送成功

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_函数库_22

7.5、引用线上库

打开Nuget包管理器,输入自己的项目名称,刚上传大概要1~10分钟左右。

可以根据以下搜索出来的界面信息,对照填写的参数信息

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#_23

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_c#_24

8、常见问题

8.1、找不到包

1)问题

【C#】封装.net framework函数库,并打包发布dll函数库到nuget服务器_开发语言_25

在以下主源中找不到包“XppHepler 1.0.5”:“https://api.nuget.org/v3/index.json”。请验证你的所有联机包源是否都可用,以及是否正确指定了包 ID、版本

2)解决方案

工具》选项》NuGet包管理器》常规》点击清除所有NuGet缓存

9、总结

Nuget推荐使用“.NET Standard”作为目标框架

到此,整个函数库封装打包上传就完成了,有疑问的地方可咨询,或不足的地方望指教,感谢您的阅读!

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695