1. 概述

前几天写了一篇文章《NuGet 私有库服务搭建》,介绍了搭建私有 NuGet 包管理平台的方法。其中涉了一部分 NuGet 包的制作方法,不过都是针对于 Nuget.Server 搭建的私有平台。如果要把包发布到 nuget.org 平台,该如何处理呢,本篇基于一款真实发布的包来具体说明。

image.png

2. NuGet 包制作说明

2.1 工具准备

开始前,需要下载两个工具:

  1. Nuget 命令行工具 nuget.exe ,地址:https://www.nuget.org/downloads (放在D盘根目,原因见6.1)
  2. 包查看工具 NuGet Package Explorer,地址:https://github.com/NuGetPackageExplorer/NuGetPackageExplorer

首先需要在解决方案文件夹下简历一个 Nuget 文件夹,里面添加一个  .nuspec 的文件:

里面包含要发布包的所有详细信息。可以从【Github】复制代码,也可复制下面代码:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <!-- Required elements-->   <id>EntLibContrib.Data.ManagedOdpNet</id>   <version>4.1.1</version>    <description>Enterprise Library 4.1 Contribution Data ODP.NET Managed Provider. Modified from https://entlibcontrib.codeplex.com.</description>
        <authors>renqiancheng</authors>
        <!-- Optional elements -->  <projectUrl>https://github.com/renqiancheng/EntLibContrib.Data.ManagedOdpNet</projectUrl>   <license type="expression">MS-PL</license><!-- 标识参考https://spdx.org/licenses/ -->   <!-- <license type="file">LICENSE.txt</license> 也可使用文件 -->  <!-- 64x64 image -->    <iconUrl>https://github.com/renqiancheng/EntLibContrib.Data.ManagedOdpNet/blob/master/EntLibContrib.Data.ManagedOdpNet/NuGet/config.png?raw=true</iconUrl>  <requireLicenseAcceptance>true</requireLicenseAcceptance>   <tags> entlib Enterprise Library 4.1 oracle ManagedDataAccess</tags>    <releaseNotes>Add more nuget package information.</releaseNotes>    <frameworkAssemblies>
            <frameworkAssembly assemblyName="System.configuration" targetFramework="net40" />       <frameworkAssembly assemblyName="System.Data.DataSetExtensions" targetFramework="net40" />      <frameworkAssembly assemblyName="System.Management" targetFramework="net40" />      <frameworkAssembly assemblyName="System.Transactions" targetFramework="net40" />
        </frameworkAssemblies>  <dependencies>
            <dependency id="Oracle.ManagedDataAccess" version="12.1.21" />
        </dependencies> <references>    <group targetFramework="net45">     <reference file="Microsoft.Practices.EnterpriseLibrary.Common.dll" />       <reference file="Microsoft.Practices.EnterpriseLibrary.Data.dll" />     <reference file="Microsoft.Practices.ObjectBuilder2.dll" /> </group>
</references>
    </metadata>
    <!-- Optional 'files' node --><files>   <file src="..\EntLibContrib.Data.ManagedOdpNet\bin\Debug\EntLibContrib.Data.ManagedOdpNet.dll" target="lib\net40" />    <file src="..\EntLibContrib.Data.ManagedOdpNet\bin\Debug\EntLibContrib.Data.ManagedOdpNet.pdb" target="lib\net40" />    <file src="..\EntLibContrib.Data.ManagedOdpNet\bin\Debug\Microsoft.Practices.EnterpriseLibrary.Common.dll" target="lib\net40" />    <file src="..\EntLibContrib.Data.ManagedOdpNet\bin\Debug\Microsoft.Practices.EnterpriseLibrary.Data.dll" target="lib\net40" />  <file src="..\EntLibContrib.Data.ManagedOdpNet\bin\Debug\Microsoft.Practices.ObjectBuilder2.dll" target="lib\net40" /></files>
</package>

.nuspec 文件大体包含三块:

  • 包含 Nuget.org 平台必须的包基础信息
  • 对包进行描述的可选信息
  • 包含需要添加的 dll 等文件

2.2 执行打包操作

在命令行环境中,进入 Nuget 文件夹下,执行如下命令:

d:\nuget.exe pack

提示如下信息,表示 nuget 包制作成功:

制作成功会在 Nuget 文件夹下生成 .nupkg 文件。

2.3 查看 Nuget 包文件

如果安装了 NuGet Package Explorer 工具之后,可以直接打开生成的 .nupkg 包文件,查看包的详细信息:

3. NuGet 包发布流程

3.1 Nuget 包上传

打包后的 .nupkg 文件,可以直接上传到 nuget.org 网站。首先,可以使用微软账号登录 nuget.org 网站,在 Upload 页面打开上传 .nupkg 文件:

image.png

image.png

image.png

image.png

上传之后,可以核对信息。没有问题直接点击 Submit 提交包。

3.1 Nuget 包验证及索引

Nuget 包发布之后,无法立即使用。需要经过自动验证和更新索引。

如下是等待验证的提示信息:

This package has not been published yet. It will appear in search results and …

image.png

同时你的 nuget.org 注册邮箱中会收到一封来自 NuGet Gallery 的包发布邮件。如下图所示:

image.png

包验证通过之后的等待索引过程,如下图所示:

image.png

4. NuGet 包 VS 引用流程

针对上面发布的包,下面建立一个空白的命令行项目,测试引用后的效果。

空白项目包含的引用如下所示:

在 NuGet 中安装刚刚发布的包:

可以看到,包文件和其他依赖库全部引用成功:

5. NuGet 包删除说明

NuGet.org 平台没有提供删除包的功能,在如下图所示的官方申明中可以看到,主要是因为要避免对已经引用此包的用户产生影响。不过可以通过设置包不再展示,来防止进一步的搜索和使用。

image.png

说明文件地址:https://docs.microsoft.com/en-us/nuget/nuget-org/policies/deleting-packages

5.1 下线 nuget 包

可以在 Nuget 用户管理中,针对指定版本的包进行下线操作:

image.png

6. 常见问题

6.1 把 nuget.exe 文件放到 System32 文件夹导致出错

前面提到把 nuget.exe 文件放到 D 盘根目录,主要是因为如果放到 C 盘的 Windows/System32 文件夹中会提示如下信息:

image.png

C:\Users\rqian>nuget
警告: 未能加载文件或程序集“HolographicExtensions.dll”或它的某一个依赖项。该模块应包含一个程序集清单。
警告: 未能加载文件或程序集“HoloSHExtensions.dll”或它的某一个依赖项。该模块应包含一个程序集清单。
警告: 未能加载文件或程序集“PerceptionSimulationExtensions.dll”或它的某一个依赖项。该模块应包含一个程序集清单。
警告: 未能加载文件或程序集“Windows.Devices.Printers.Extensions.dll”或它的某一个依赖项。该模块应包含一个程序集清单。
NuGet Version: 5.0.2.5988
usage: NuGet <command> [args] [options]
Type 'NuGet help <command>' for help on a specific command.

放到 D 盘根目录使用正常:

image.png

C:\Users\rqian>d:\nuget.exe
NuGet Version: 5.0.2.5988
usage: NuGet <command> [args] [options]
Type 'NuGet help <command>' for help on a specific command.

7. 参考文献

  1. nuspec reference

最后更新时间:2019/7/14 22:48:01