NuGet打包与发布,造自己的WPF轮子

Java有Maven中央库,而.Net有NuGet库

每次新建项目时,都要重新NuGet安装很多框架,很麻烦,所以今天捣鼓了一下NuGet打包与发布的方法,并将自己写的常用方法、封装的库方法和类扩展方法分享出来。与第三方库作为依赖,打包在一起,生成一个nupkg包发布到NuGet官方库里,后续新建项目时,只需要一个NuGet命令,自动安装各种库和依赖。

一直想要把自己常用的工具类和一些自己写的方法打包成独立的dll,发布到NuGet中央库里,这样每次只要一个命令,就可以使用各种提前封装好的方法了

准备工作

  • 微软账号:可以自己注册一个,我使用的是很久以前注册的Hotmail账号【Hotmail
  • NuGet程序:一个独立的exe程序,需要加入到系统环境变量PATH中【下载地址
  • 需要打包的项目
  • 管理员运行cmdpowershell
  • notepad++:用来修改一些配置参数,不推荐微软自带的notepad(记事本)

生成nuspec配置文件

具体详细介绍,可以到微软官方文档查看:nuspec

进入到项目的目录里,然后在地址栏输入cmd,并执行命令:nuget spec
在这里插入图片描述
随后创建成功会提示:已成功创建“Kang.Framework.Util.nuspec”。,这个时候不要关闭cmd界面,等会还要使用
在这里插入图片描述
成功后你会在项目目录里看见一个后缀为nuspec的文件,这个就是NuGet打包的配置文件了
在这里插入图片描述
我们需要将内容修改一下:

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    <id>Kang.Framework.Util</id>
    <version>0.0.0.2</version>
    <title>$title$</title>
    <authors>Hao Zekang</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <projectUrl>https://blog.haozekang.com</projectUrl>
    <iconUrl>https://blog-static.cnblogs.com/files/haozekang/kang.ico</iconUrl>
    <description>自己用的Framework工具集</description>
    <releaseNotes>工具集</releaseNotes>
    <copyright>Copyright 2020</copyright>
    <tags>Kang Util</tags>
	<dependencies>
      <group targetFramework=".NETFramework4.0" />
    </dependencies>
  </metadata>
</package>

其中idversiondescriptionauthors四个节点为必填

打包

继续在cmd命令行界面输入命令:nuget pack Kang.Framework.Util.csproj

nuget pack <项目文件全名>

打包成功效果如下图,打包成功会在工程目录下生成一个nupkg文件
在这里插入图片描述
在这里插入图片描述
这里对警告进行解释一下

  • NU5128:没有指定group目标框架,并建议指定.NETFramework4.0框架,报这个警告,属于最新版NuGet程序的BUG吧,好像使用低版本的NuGet程序不存在这个问题
  • NU5048:警告用户iconUrl是弃用节点,建议修改为icon节点
    在这里插入图片描述
    修改nupkg文件,我电脑使用的是7-Zip压缩软件
    在这里插入图片描述
    在打开的压缩包界面,找到nuspec文件并编辑,可以看到打包好的配置文件中没有包含我们配置文件设置的group节点信息,需要我们自己再手动给添加进去
    在这里插入图片描述
    修改后内容如下:
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>Kang.Framework.Util</id>
    <version>0.0.0.2</version>
    <title>Kang.Framework.Util</title>
    <authors>Hao Zekang</authors>
    <owners>Hao Zekang</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <licenseUrl>https://licenses.nuget.org/MIT</licenseUrl>
    <projectUrl>https://blog.haozekang.com/</projectUrl>
    <iconUrl>https://blog-static.cnblogs.com/files/haozekang/kang.ico</iconUrl>
    <description>自己用的Framework工具集</description>
    <releaseNotes>工具集</releaseNotes>
    <copyright>Copyright 2020</copyright>
    <tags>Kang Util</tags>
    <dependencies>
      <group targetFramework=".NETFramework4.0">
        <dependency id="HtmlAgilityPack" version="1.11.24" />
        <dependency id="Kang.Framework.ExtendMethod" version="0.0.0.2" />
      </group>
    </dependencies>
  </metadata>
</package>

返回压缩包界面会提示是否保存,当然选择
在这里插入图片描述

发布

在这里插入图片描述
如果检测到已存在的id或该id已发布过该版本号,则提示无法修改
在这里插入图片描述
检测该id和版本可以发布时,会弹出如下界面
在这里插入图片描述
点击发布后,你会进入到一个验证等待界面,看到一个黄色的提示信息,信息内容如下图红色圈出部分,然后一般等待几分钟再刷新界面即可看到NuGet安装命令了,代表发布包成功了!
在这里插入图片描述

发布后效果

在这里插入图片描述
点进去以后如下图所示
在这里插入图片描述

体验一波

  • 新建一个WPF项目NuGetTest

  • 输入命令:Install-Package Kang.WPF.ExtendMethod -Version 0.0.0.4
    在这里插入图片描述

  • 因为是MahApps.Metro项目,所以修改App.xaml如下:

<Application x:Class="NuGetTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:NuGetTest"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml">
                </ResourceDictionary>
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml">
                </ResourceDictionary>
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml">
                </ResourceDictionary>
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml">
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>
  • 修改MainWindow.xaml和cs如下:
<metro:MetroWindow x:Class="NuGetTest.MainWindow"
                   xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls"
                   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                   xmlns:local="clr-namespace:NuGetTest"
                   mc:Ignorable="d"
                   Title="MainWindow" Height="450" Width="800">
    <metro:MetroWindow.RightWindowCommands>
        <metro:WindowCommands>
            <Button Content="退出账号" Padding="0 0 0 0" Cursor="Hand" Margin="5 0 5 0"/>
            <TextBlock x:Name="txt_name" Text="用户:" Margin="5 0 5 0" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
        </metro:WindowCommands>
    </metro:MetroWindow.RightWindowCommands>
    <Grid>
        
    </Grid>
</metro:MetroWindow>
using MahApps.Metro.Controls;

namespace NuGetTest
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}
  • 运行项目效果
    在这里插入图片描述

注意事项

  • NuGet一旦Upload一个版本的nupkg包,就禁止永久删除,也不能覆盖,所以上传需谨慎!
  • nuget delete命令也只是删除包的查询和显示,只是状态Status变成了Unlisted,而不是真正删除!
    在这里插入图片描述
  • 配置文件中idversiondescriptionauthors四个节点为必填
  • NuGet打包时有一个BUG,就是目标框架问题,dependencies中的group不会被打包的nupkg包中,需要我们手动去修改打包好的nupkg文件。还有一点,groupdependency不能同时存在dependencies节点下,如果dependencies下面出现了group节点,那dependencies下的dependency就都要放到group

nupkg文件可以使用7-Zip等压缩软件直接打开

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0564丶Kang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值