包治百病 | 如何将一个.NET Core类库发布到NuGet
NuGet是.NET世界的包管理器,有官方的nuget.org,也允许构建公司和私人的服务器。在.NET Core的时代,封装一个NuGet包比以往更容易,我们来看看吧!
NuGet账号
如果你想和微软一起予力众生,让全世界的.NET程序员都能用上你的包,远离996,那么你就需要有个nuget.org的账号,用来上传自己的包。
nuget.org可以用微软账号直接登录,免去注册的麻烦。
登录以后,建议大家先去搞一套API Key,并记在OneNote里,虽然本文讨论的范围内不需要使用这套Key,但如果以后你希望通过NuGet CLI或自动化工具(如Azure DevOps)发布NuGet包的话,就用得上它。
使用 VS2019 创建NuGet包
以我的一个类库Edi.Blog.Pingback为例,开发完成以后,在项目文件上点右键,打开属性对话框。
在Package选项卡中,勾选 Generate NuGet package on build。
并且填写一些必要信息。Package id 是最重要的,即最终用户安装你的NuGet包时,使用的ID。这和Product是不一样的。最经典的例子就是Json.NET,它的Package id是Newtonsoft.Json,而不是Json.NET。一般为了避免混淆的情况,我建议大家保持Package id和Product名称一致。
其次是版本号,Package version是最终会显示在nuget.org网页上的版本,也是通过NuGet CLI指定安装版本时候所用的版本。为了避免混淆,也建议与Assembly/File version保持一致。
其他信息可以根据需要填写,越详细越好。比如我的这个包,是在NuGet用MIT协议开源的,我就可以填写仓库地址(Repository URL),以及协议。就算不是开源的包,也建议大家填写协议。不然最终上传nuget.org之后,会报一个警告。
其实在VS界面上进行的这些操作,最终是反映到工程文件里的(Edi.Blog.Pingback.csproj),也就是说,如果你是个VSCode党,也可以通过手工编辑工程文件的方式来完成这一系列的设置。
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>Edi Wang</Authors>
<Company>edi.wang</Company>
<Description>Pingback sender and receiver used in my blog system.</Description>
<RepositoryUrl>https://github.com/EdiWang/Edi.Blog.Pingback</RepositoryUrl>
<PackageProjectUrl>https://edi.wang</PackageProjectUrl>
<AssemblyVersion>10.1.0.0</AssemblyVersion>
<FileVersion>10.1.0.0</FileVersion>
<Version>10.1.0</Version>
<PackageTags>Blog, Pingback</PackageTags>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
接下来,切换到Release模式编译一把,就可以在bin elease下生成一个nupkg格式的包了!使用Release是因为面对的是生产环境,希望最终用户使用编译器优化过的dll。
// 其实,一个NuGet包可以同时包含Release和Debug两个版本的dll,不在本文讨论范围内。
上传到 nuget.org
最简单的方式,是通过网页上传。在nuget.org的用户菜单下面,选择Upload Package。
据说我们.NET程序员都是拖控件的,所以我们只能把刚才编译出来的nupkg文件拖到网页中,完成上传。
在确认信息无误后,点击页面最下方的 Submit 按钮提交审核。
接下来,你会看到审核的状态。最初是 Validating,审核通过后会变成 Listed。一般5分钟就可以。
但是在Listed之后,还是会有一个警告,意思是服务器的索引还没建完,用户搜不到该版本的包。如果心急,可以等到显示Listed后,通过NuGet CLI或者编辑project文件,指定具体版本号去安装。
等警告消失后,你的包就完完整整的ready了!赶紧向全世界分享你的成果吧~
相关工具推荐
NuGet命令行工具:https://www.nuget.org/downloads
NuGet Package Explorer,Windows下的可视化NuGet包编辑器,可以解剖、编辑、上传NuGet包:https://www.microsoft.com/store/productId/9WZDNCRDMDM3
我来说两句