【NuGet攻略】C#开发者必备技能:构建发布开发工具包
来源 https://mp.weixin.qq.com/s/YqKTdyLXuODBLxnhar52Xg
前言
在 C# 开发领域里,构建代码库,分享与使用可复用代码的机制是十分必要的,它可以提高开发效率。通常,我们把可复用代码打包后的文件称为包(Package)。
在 .NET 中,通过使用 NuGet 平台实现包的管理。它提供了一系列客户端用于生成、上传、使用和存储所有包的中心库。本文将介绍如何将C#类库打包并发布到 NuGet。
准备工作
1、安装工具
需要将C#的类库打包到NuGet上,安装 NuGet 管理工具是必不可少的,它就像是一个智能的资源管理器,能帮我们轻松管理 NuGet 包。(Visual Studio 较新版本,一般会自带 NuGet Package Manager。)
// 官网下载地址https://www.nuget.org/downloads
2、获取 API KEY
要将生成的 NuGet 包发布到 NuGet 服务器,我们还需要获取一个 API KEY。它用于验证我们的身份,确保只有我们才能将包发布到指定的账户下。
// NuGet 官网地址https://www.nuget.org/

在这个页面,点击 Create ,在 Select Scopes 下拉框中选择 Push(表示这个 API Key 用于推送包)。在 Glob pattern 输入框中填入*(表示这个 API Key 可以用于推送所有的包)。最后点击 Create 按钮,就会生成一个 API Key。
注意:API Key 非常重要,一定要妥善保存,不要泄露给他人。
3、创建类库
现在,工具都准备好了,我们来创建一个 C# 类库项目。这里以一个简单的数字转大写人民币类库为例。当然也可以是其他,如字符串处理、数据验证等。
使用 Visual Studio 创建一个 .NET 类库项目,命名为 Fountain.Utility.Extension(自定义命名),然后在项目下创建数字转大写人民币转换的类,命名为 Numbers (自定义命名)。
using System.Text;namespace Fountain.Utility.Extension{public class Numbers{private static readonly string[] ChineseNumbers = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };private static readonly string[] ChineseUnits = { "", "拾", "佰", "仟" };private static readonly string[] ChineseSectionUnits = { "", "万", "亿", "万亿" };/// <summary>/// 转换/// </summary>/// <param name="amount">金额</param>/// <returns></returns>public static string Convert(decimal amount){if (amount == 0){return "零元整";}long integerPart = (long)Math.Truncate(amount);///int decimalPart = (int)Math.Round((amount - integerPart) * 100, MidpointRounding.AwayFromZero);// 存处理结果StringBuilder result = new StringBuilder();// 处理整数部分if (integerPart > 0){IntegerPart(integerPart, result);result.Append("元");}// 处理小数部分if (decimalPart > 0){DecimalPart(decimalPart, result);}else{if (integerPart > 0){result.Append("整");}}return result.ToString();}/// <summary>/// 整书部份/// </summary>/// <param name="number"></param>/// <param name="stringBuilder"></param>private static void IntegerPart(long number, StringBuilder stringBuilder){int sectionIndex = 0;bool needZero = false;while (number > 0){int section = (int)(number % 10000);if (needZero){stringBuilder.Insert(0, "零");}string sectionStr = ConvertSection(section);if (section != 0){stringBuilder.Insert(0, sectionStr + ChineseSectionUnits[sectionIndex]);}needZero = (section < 1000 && section > 0);number /= 10000;sectionIndex++;}}/// <summary>////// </summary>/// <param name="section"></param>/// <returns></returns>private static string ConvertSection(int section){StringBuilder stringBuilder = new StringBuilder();int unitIndex = 0;bool zero = false;for (int i = 0; i < 4; i++){int num = section % 10;if (num == 0){if (!zero && section / 10 > 0){zero = true;}}else{if (zero){stringBuilder.Insert(0, "零");zero = false;}stringBuilder.Insert(0, ChineseNumbers[num] + ChineseUnits[unitIndex]);}section /= 10;unitIndex++;}return stringBuilder.ToString();}/// <summary>/// 小数部份/// </summary>/// <param name="decimalPart"></param>/// <param name="stringBuilder"></param>private static void DecimalPart(int decimalPart, StringBuilder stringBuilder){int jiao = decimalPart / 10;int fen = decimalPart % 10;if (jiao > 0){stringBuilder.Append(ChineseNumbers[jiao] + "角");}if (fen > 0){stringBuilder.Append(ChineseNumbers[fen] + "分");}if (jiao == 0 && fen > 0){stringBuilder.Insert(stringBuilder.Length - 2, "零");}}}}
NuGet 发布
1、配置项目属性
在解决方案资源管理器中,右键点击我们创建的项目,选择属性。在弹出的属性窗口中,选择包(或打包) 选项卡。
在 打包 选项卡中,有几个关键信息需要我们配置:
-
包 ID:是包的唯一标识符,它在 NuGet 库中必须是独一无二的。可以根据项目的实际情况来命名。
-
版本号:版本号对于类库的管理和更新非常重要。应遵循语义化版本号的规范,格式为 【主版本号.次版本号.修订号】。
-
作者:填写类库的开发者或团队名称,这样使用者就能知道这个类库是谁开发的。
-
描述:用简洁明了的语言描述类库的功能和用途,让使用者在看到包的时候就能快速了解它的作用。

2、编译打包
-
使用 Visual Studio 自带的打包功能:在解决方案资源管理器中,右键点击项目,选择 打包。Visual Studio 会自动执行打包操作,并在输出窗口中显示打包的进度和结果。打包完成后,我们可以在项目的bin\Release目录下找到生成的.nupkg 文件。
-
使用命令行工具: 使用 nuget pack 、 dotnet pack 和 msbuild -t:pack -p:Configuration=Release
nuget pack: 旧的打包行为,对于 SDK 样式的项目,已不再被支持。
dotnet pack:NET Core 或 .NET 5.0 及更高版本,推荐使用。
msbuild -t:pack 对倾向于使用 MSBuild 来打包的。
通过 Developer Command Prompt for vs 2022 命令行或 CMD 命令行,执行 dotnet pack 项目名

3、推送包到 NuGet
-
设置API Key: 通过命令 nuget setapikey ----------- 使用上面获取的API Keys
-
推送包: 通过命令 nuget.exe push 包名.nupkg(完整路径) -Source https://www.nuget.org 把包推送NuGet服务器。

使用NuGet包
我们可以使用 NuGet 包管理器或 CLI 搜索包。
using Fountain.Utility.Extension;namespace Fountain.Utility.Test{internal class Program{static void Main(string[] args){Console.WriteLine(Numbers.Convert(135.30M));Console.Read();}}}

浙公网安备 33010602011771号