我想目前每个.net开发人员都应该知道nuget.org和NuGet软件包吧。但是,您是否曾经尝试并创建过一个nuget包呢?Nuget软件包比较容易引入到类库中。因此,可以使用NuGet软件包管理器将nuget软件包添加到任何项目中。

Nuget包的剖析

Nuget软件包不仅是dll文件。NuGet包是可移植的,它包含您要放入.Net项目中的所有内容。您可以在其中放置txt文件或png文件。这就是为什么我们称它们为“包裹”。您可以打包一些开发文件,并将它们以.nupkg格式在项目之间移动。
我刚刚解压缩了InputKit的nuget包,您可以在下图中看到nupkg文件的树状视图。

如何从零开发一个NuGet软件包?-LMLPHP

因此,只需查看其中的文件夹和文件。
icon.png:
这是您的NuGet包的图标文件。现在已将其嵌入.nupkg中,但在早期版本的NuGet中只能定义为url。
.nuspec
nuspec是关于nuget包的元数据文件。在早期版本中,它曾经用于打包nuget包。但是在新的dotnet CLI中,此文件是由roslyn编译器从您的.csproj文件生成的。它包括软件包的目标框架,名称,许可证,图标,标签,与其他包的依赖关系以及其中描述的要放置到添加的项目中的静态文件。
[Content_Types] .xml:
这是一个元数据文件,提供了程序包中包含的每个文件扩展名。
lib:
软件包的主文件夹。此文件夹包括您的构建输出。换句话说,它在构建之后包含了bin文件夹。所以您可以看到不同目标框架的文件夹与项目输出相同。例如,如果您的.csproj文件是多目标的,您可以像我一样看到每个目标框架的文件夹。
package:
此文件夹包含有关您的包的更多元数据文件。此数据与您在nuget软件包列表中看到的数据相同:“创建者”,“描述”,“标识符”,“版本”和“关键字”。
_rels / .rels:
这是xml格式的文件扩展名,由Microsoft创建和使用。您可以从此处查看有关.rels格式的更多信息。它主要用于Microsoft Office。

创建你的第一个库

每一个开发者都应该知道类库。它们很难移动或用于不同的项目。因为它们的输出是dll文件。在本文中,我不会谈论如何构建库。我将展示如何将它们转换为可移植的nuget包。因此,让我们从第一步开始。
1-选择目标框架
选择目标框架是非常重要!只需计划你的项目并定义依赖项即可。如果您的依赖项需要.net core(如实体框架)或以.Net core为目标的对象,只需将目标框架选为“.Net core”。但如果不是,请始终尝试在“.Net Standard”上构建库。顺便说一句,你可以建立一个多目标项目。您可以从此处阅读有关多目标项目的更多信息。
2-填充元数据
在我们所处的时代,MetaData是最重要的事情。MetaData可以更轻松地找到您的包裹并最好地描述其作用。因此,请正确填写您的元数据。在Visual Studio中创建类库后,只需右键单击并转到属性。您可以在“打包”标签下看到所有可以填写的字段。
如果您的环境不是Visual Studio,则可以直接修改.csproj文件,如下所示。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageId>My.Package</PackageId>
    <Version>1.0.1</Version>
    <Authors>enisn</Authors>
    <Company>enisn</Company>
    <Product>My Package</Product>
    <Description>This is my packages description.</Description>
    <Copyright>All rights reserved</Copyright>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
    <PackageProjectUrl>https://github.com/enisn/MyPackage</PackageProjectUrl>
    <RepositoryUrl>https://github.com/enisn/MyPackage</RepositoryUrl>
    <PackageTags>my,awesome,package</PackageTags>
    <PackageReleaseNotes>Hot fixes</PackageReleaseNotes>
  </PropertyGroup>

</Project>

3-打包!
这就是奇迹发生的地方!准备好你的代码,右键单击您的项目,然后单击“打包”按钮。您的nupkg文件将在您项目的bin文件夹中等待着您。
如果您的开发环境不是Visual Studio,则可以使用命令提示符来执行此操作,如下所示:

dotnet pack My.Package.csproj

4-与全世界分享!
转到nuget.org并登录到你的帐户。然后导航到“发布”选项卡,并将您的.nupkg文件拖放到该页面中。填写有关包裹的信息字段并提交。仅此而已!这是在nuget.org上发布软件包的最简单方法。
使用命令行工具
但是您也可以在命令行下执行此操作。让我们来看看这种方式。
首先,您需要一个Api-Key与nuget API通信。转到nuget.org上的个人资料,然后找到“ API密钥”部分,如下所示。

如何从零开发一个NuGet软件包?-LMLPHP

创建一个API密钥并保存它。您将无法再次看到它。因此,您需要保存它。
现在,从打包开始,然后您可以通过CLI进行推送。
dotnet pack --configuration Release -o .packages/
这意味着在发布模式下构建项目,并将输出文件放置到“ .packages”文件夹中。因此,我们可以轻松地从.pacakges文件夹中找到输出。因此,您的nupkg文件已准备好推送。使用以下命令将软件包推送到nuget.org或您自定义的源:
dotnet nuget push .\.packages\My.Pacakge.1.0.1.nupkg --source [https://api.nuget.org/v3/index.json](https://api.nuget.org/v3/index.json) --api-key YOUR_API_KEY --skip-duplicate
我使用了 skip-duplicate 参数,因为如果要配置 CI ,则可以多次推送相同版本的软件包,而如果要推送已经存在的版本,则会出现错误,并且 CI-CD 进程将失败。因此,使用 skip-duplicate 参数忽略已存在的版本推送,并成功完成操作。
感谢您的阅读,我们下篇文章见!
翻译自:https://enisn.medium.com/how-to-develop-a-nuget-package-d37400d9e1d3

12-23 13:08