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

文章目录

  • 准备工作
  • 生成nuspec配置文件
  • 打包
  • 发布
  • 发布后效果
  • 体验一波
  • 注意事项

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

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

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

准备工作

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

生成nuspec配置文件

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

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


<package >
  <metadata>
    <id>Kang.Framework.Utilid>
    <version>0.0.0.2version>
    <title>$title$title>
    <authors>Hao Zekangauthors>
    <owners>$author$owners>
    <requireLicenseAcceptance>falserequireLicenseAcceptance>
    <license type="expression">MITlicense>
    <projectUrl>https://blog.haozekang.comprojectUrl>
    <iconUrl>https://blog-static.cnblogs.com/files/haozekang/kang.icoiconUrl>
    <description>自己用的Framework工具集description>
    <releaseNotes>工具集releaseNotes>
    <copyright>Copyright 2020copyright>
    <tags>Kang Utiltags>
	<dependencies>
      <group targetFramework=".NETFramework4.0" />
    dependencies>
  metadata>
package>

其中idversiondescriptionauthors四个节点为必填

打包

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

nuget pack <项目文件全名>

打包成功效果如下图,打包成功会在工程目录下生成一个nupkg文件
NuGet打包与发布,造自己的WPF轮子_第4张图片
NuGet打包与发布,造自己的WPF轮子_第5张图片
这里对警告进行解释一下

  • NU5128:没有指定group目标框架,并建议指定.NETFramework4.0框架,报这个警告,属于最新版NuGet程序的BUG吧,好像使用低版本的NuGet程序不存在这个问题
  • NU5048:警告用户iconUrl是弃用节点,建议修改为icon节点
    NuGet打包与发布,造自己的WPF轮子_第6张图片
    修改nupkg文件,我电脑使用的是7-Zip压缩软件
    NuGet打包与发布,造自己的WPF轮子_第7张图片
    在打开的压缩包界面,找到nuspec文件并编辑,可以看到打包好的配置文件中没有包含我们配置文件设置的group节点信息,需要我们自己再手动给添加进去
    NuGet打包与发布,造自己的WPF轮子_第8张图片
    修改后内容如下:
    NuGet打包与发布,造自己的WPF轮子_第9张图片

<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>Kang.Framework.Utilid>
    <version>0.0.0.2version>
    <title>Kang.Framework.Utiltitle>
    <authors>Hao Zekangauthors>
    <owners>Hao Zekangowners>
    <requireLicenseAcceptance>falserequireLicenseAcceptance>
    <license type="expression">MITlicense>
    <licenseUrl>https://licenses.nuget.org/MITlicenseUrl>
    <projectUrl>https://blog.haozekang.com/projectUrl>
    <iconUrl>https://blog-static.cnblogs.com/files/haozekang/kang.icoiconUrl>
    <description>自己用的Framework工具集description>
    <releaseNotes>工具集releaseNotes>
    <copyright>Copyright 2020copyright>
    <tags>Kang Utiltags>
    <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>

返回压缩包界面会提示是否保存,当然选择
NuGet打包与发布,造自己的WPF轮子_第10张图片

发布

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

发布后效果

NuGet打包与发布,造自己的WPF轮子_第15张图片
点进去以后如下图所示
NuGet打包与发布,造自己的WPF轮子_第16张图片

体验一波

  • 新建一个WPF项目NuGetTest

  • 输入命令:Install-Package Kang.WPF.ExtendMethod -Version 0.0.0.4
    NuGet打包与发布,造自己的WPF轮子_第17张图片

  • 因为是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
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}
  • 运行项目效果
    NuGet打包与发布,造自己的WPF轮子_第18张图片

注意事项

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

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

你可能感兴趣的:(C#)