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

news2024/12/27 10:45:49

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

1)NuGet Gallery | Home

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”作为目标框架

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑怎么设置定时关机?分享2个简单操作!

随着互联网时代的发展&#xff0c;越来越多人使用电脑。使用过程中&#xff0c;有时会产生很多疑惑&#xff0c;其中有朋友问小编&#xff1a;电脑怎么设置定时关机&#xff1f;其实Windows系统设置关机很简单&#xff0c;主要有下面两个方法&#xff01; 演示机型&#xff1a;…

【学习打卡 Free-Excel 】Task1~2 数据源何而来_数据格式

free-excel 文章目录free-excel1 数据基本知识工作簿与工作表xls和xlsx单元格行列导入数据从文件导入数据从网页导入数据&#xff1a;中文编码&#xff1a;2 表格单元格数据类型excel错误提示数据统一添加符号数值转文本、文本转数值资源链接 Free excel_文字版Free excel&…

系分 - 案例分析 - 数据库设计(基本)

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录系分 - 案例分析 - 数据库设计&#xff08;基本&#xff09;数据库基础数据库设计规范化&#xff08;范式&#xff09;数据库事务并发控制典型例题题目描述参考答案数据库安全性技术视图物化视图存储过程触…

【练习】Day07

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. 不同路径2. 三角形最小路径和 [重点理解&#xff01;&#xff01;]答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 以下关于 Servlet 生命周期说法错误的是 ( ) A: Servlet 容器…

解构模块化区块链

干货&#xff1a;解构模块化区块链 在可扩展性方面&#xff0c;模块化区块链是区块链设计的最新范式。 模块化的概念起源于Layer1区块链Celestia&#xff0c;现在这个概念也逐渐被更多的人所关注&#xff0c;还有人甚至提出”模块化区块链将定义Web3创新的下一个十年“的口号…

java.sql.SQLException: ORA-28001: the password has expired

1、找到SQL Plus 运行 2、登录 请输入户名: sys as sysdba 输入口令&#xff1a;&#xff08;sys用户的密码&#xff09;3、以dba角色登入 SQL >connect as sysdba; 请输入户名: sys as sysdba 输入口令&#xff1a;&#xff08;sys用户的密码&#xff09;4、修改密码 SQ…

Flink:FlinkSql解析嵌套Json

日常开发中都是用的简便json格式&#xff0c;但是偶尔也会遇到嵌套json的时候&#xff0c;因此在用flinksql的时候就有点麻烦&#xff0c;下面用简单例子简单定义处理下 1&#xff0c;数据是网上摘抄&#xff0c;但包含里常用的大部分格式 { "afterColumns": {…

SpringBoot集成Elasticsearch7.4 实战(一)

在网上已经有好多关于Elasticsearch的介绍&#xff0c;就不在翻来覆去讲一些基本概念&#xff0c;大家感兴趣的可以自己去找一些资料巩固下。这次只为了顾及众多首次接触Elasticsearch&#xff0c;案例都讲的很浅显&#xff0c;还有就是受个人能力所限&#xff0c;各位读者发现…

大数据-hadoop-hdfs

Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统&#xff08;Distributed File System&#xff09;。它和现有的分布式文件系统有很多共同点。但同时&#xff0c;它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度…

数据结构(3)线段树基础

活动 - AcWing 参考《算法竞赛进阶指南》-lyd 一、概述 1.简述、所需空间 线段树是一种基于分治思想的二叉树结构&#xff0c;用于区间上的信息统计。与树状数组相比&#xff0c;线段树是一种更通用的数据结构。 线段树每个节点代表一个区间。线段树具有唯一根节点&#x…

关于KDDockWidget源码修改和自定义

前言 前面的文章介绍过KDDockWidget的基本使用及示例&#xff0c;文章在这里&#xff1a; KDDockWidgets源码编译及安装 qml dockwidget窗口停靠 QML KDDockWidget 实现 tabwidget效果&#xff08; 窗口可独立浮动和缩放&#xff09; 今天主要记录一些在KDDockWidget源码中的…

来自元宇宙的声音:Chord Hero

这一集&#xff0c;我们邀请了 Chord Hero 的联合创始人兼行政总裁 Anthony Chau 来谈谈促使他加入 The Sandbox 元宇宙的原因以及即将在即将到来的游戏赛季推出的第一个项目。 请告诉我们更多关于 Chord Hero 的信息吧。 Chord Hero 通过一系列实体和数字产品让学习音乐变得有…

视图(view)

1、视图&#xff1a;&#xff08;了解内容&#xff09; 就是站在不同的角度去看待同一份数据。 视图是MySQL服务器中的一个对象&#xff0c;用于存储查询语句&#xff0c;目的的提高查询语句的使用效率&#xff0c;避免在多处地方重复性开发相同的查询语句。 - 将查询语句交给一…

Transformer学习笔记1

模型分类&#xff1a;GPT类型&#xff1a; auto-regressive&#xff08;decoder模型&#xff0c;过去时刻的输出也是现在的输入&#xff0c;例如要得到y8还需要知道y1到y7&#xff0c;但不能使用y9&#xff0c;例如用于文本生成任务&#xff09;GPTGPT2CTRLTransformer XLBERT类…

Docker 容器监控

目录 cAdvisor 安装cAdvisor 使用Prometheus监控cAdvisor cAdvisor暴露的Prometheus指标 容器指标 1. 文档&#xff1a; 2. 指标 硬件指标 1. 文档&#xff1a; 2. 指标&#xff1a; Node Exporter 安装Node Exporter 1. 启动容器&#xff0c;默认端口为9100 2. …

2023免费电脑c盘磁盘数据恢复软件EasyRecovery

无论是台式机还是笔记本电脑&#xff0c;我们都习惯将其划分成多个大小不一的磁盘&#xff0c;有的是用于安装系统&#xff0c;有的则是用于存储文件。今天小编就和大家解答一下关于电脑磁盘的问题&#xff0c;电脑只剩c盘是硬盘坏了吗&#xff0c;电脑突然就剩c盘怎么恢复。想…

【BP靶场portswigger-客户端16】测试WebSockets安全漏洞-3个实验(全)

前言&#xff1a; 介绍&#xff1a; 博主&#xff1a;网络安全领域狂热爱好者&#xff08;承诺在CSDN永久无偿分享文章&#xff09;。 殊荣&#xff1a;CSDN网络安全领域优质创作者&#xff0c;2022年双十一业务安全保卫战-某厂第一名&#xff0c;某厂特邀数字业务安全研究员&…

CMMI落地4大工具 助力CMMI3-5级高效落地

CMMI落地4大工具近日正式上线&#xff0c;全面支持CMMI3-5级&#xff0c;助力CMMI高效落地。CoCode旗下的Co-ProjectV3.0智能项目管理平台全新发布&#xff1a;CMMI成熟度自测工具、量化管理工具&#xff08;组织级过程改进工具和量化项目管理工具&#xff09;、组织级过程资产…

分享视频剪辑必备的三个素材软件(配音/文案/图片)

hello&#xff0c;大家好&#xff0c;相信现在很多小伙伴都需要制作视频&#xff0c;无论是从事短视频行业&#xff0c;还是单纯想分享生活视频的都需要对视频进行简单的处理吧&#xff1f;有时候会需要介绍视频内容或是给视频增加点配音&#xff0c;来让视频不那么单调&#x…

C++11 解决内存泄露问题的智能指针:shared_ptr、unique_ptr、weak_ptr

我们经常听到内存泄漏&#xff0c;但是对这个抽象的概念一直没有什么理解&#xff0c;比如产生内存泄漏又将如何&#xff0c;我平时写程序从来不考虑这个等等。这篇的目的&#xff1a;第一&#xff0c;给大家实验实验内存泄露带来的问题&#xff0c;让大家直观感受内存泄露。第…