原文链接:使用 dotnet CLI 来打包和发布 .NET Core nuget package
如何使用 visual studio 2015/2017 打包和发布 Nuget package, 微软在这里有介绍:
对于只安装了 vs code 和 .net core sdk 的同学,可以参照本文利用 dotnet CLI 来打包和发布 .NET Core nuget package。
打包 Nuget Package
可以使用 dotnet pack 命令来打包已经完成的 .net core library,进入Project所在目录,运行 dotnet pack 命令,会产生如下效果:
- 根据 .csproj 中定义的属性生成 .nuspec 文件,默认在 obj 路径下
- 根据 .nuspec 文件,打包成 Nuget package,默认在 bin\debug 路径下
.nuspec文件定义了 Nuget package 需要的一些属性,比如 id,version等,内如如下:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Supperxin.SendCloud</id>
<version>1.0.0</version>
<authors>Supperxin.SendCloud</authors>
<owners>Supperxin.SendCloud</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package Description</description>
<dependencies>
<group targetFramework=".NETStandard1.4">
<dependency id="NETStandard.Library" version="1.6.1" exclude="Build,Analyzers" />
<dependency id="Newtonsoft.Json" version="9.0.1" exclude="Build,Analyzers" />
</group>
</dependencies>
</metadata>
<files>
<file src="xxx\Supperxin.SendCloud\src\Supperxin.SendCloud\bin\Debug\netstandard1.4\Supperxin.SendCloud.dll" target="lib\netstandard1.4\Supperxin.SendCloud.dll" />
</files>
</package>
这些属性是根据 .csproj 中的属性自动生成的,对应关系如下表:
Attribute/NuSpec Value | MSBuild Property | Default | Notes |
---|---|---|---|
Id | PackageId | AssemblyName | $(AssemblyName) from msbuild |
Version | PackageVersion | Version | New $(Version) property from msbuild, is semver compatible. Could be “1.0.0”, “1.0.0-beta”, or “1.0.0-beta-00345”. |
Authors | Authors | username of the current user will be the default value | |
Title | Title | empty | |
Owners | N/A | Not present in NuSpec | |
Description | Description | "Package Description" | |
Copyright | Copyright | empty | |
RequireLicenseAcceptance | PackageRequireLicenseAcceptance | false | |
LicenseUrl | PackageLicenseUrl | empty | |
ProjectUrl | PackageProjectUrl | empty | |
IconUrl | PackageIconUrl | empty | |
Tags | PackageTags | empty | |
ReleaseNotes | PackageReleaseNotes | empty | |
RepositoryUrl | RepositoryUrl | empty | |
RepositoryType | RepositoryType | empty | |
PackageType | <PackageType>DotNetCliTool, 1.0.0.0;Dependency, 2.0.0.0</PackageType> |
维护 Nuget package 属性
打开 .csproj 文件,按照上表的对应关系,我们做如下修改:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
<PackageId>supperxin.test</PackageId>
<PackageVersion>1.0.1</PackageVersion>
<Authors>Supperxin</Authors>
<Title>Test for Nuget package</Title>
<Description>This is a test nuget package.</Description>
<PackageIconUrl>http://cdn.supperxin.com/images/upload/2017/7/7c120726-c8ca-499f-a974-e896e308bfa0.jpg</PackageIconUrl>
<PackageProjectUrl>https://github.com/xiaoxin01/Supperxin.SendCloud</PackageProjectUrl>
<RepositoryUrl>https://github.com/xiaoxin01/Supperxin.SendCloud</RepositoryUrl>
</PropertyGroup>
</Project>
修改完成之后再次打包:dotnet pack,发现新生成的 nuspec 文件已经相应的更改:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Supperxin.SendCloud</id>
<version>1.0.1</version>
<title>Send mail package for SendCloud</title>
<authors>Supperxin</authors>
<owners>Supperxin</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<projectUrl>https://github.com/xiaoxin01/Supperxin.SendCloud</projectUrl>
<iconUrl>http://cdn.supperxin.com/images/upload/2017/7/7c120726-c8ca-499f-a974-e896e308bfa0.jpg</iconUrl>
<description>This is a package for send mail using sendcloud service</description>
<repository url="https://github.com/xiaoxin01/Supperxin.SendCloud" />
<dependencies>
<group targetFramework=".NETStandard1.4">
<dependency id="NETStandard.Library" version="1.6.1" exclude="Build,Analyzers" />
<dependency id="Newtonsoft.Json" version="9.0.1" exclude="Build,Analyzers" />
</group>
</dependencies>
</metadata>
<files>
<file src="xxx\Supperxin.SendCloud\src\Supperxin.SendCloud\bin\Debug\netstandard1.4\Supperxin.SendCloud.dll" target="lib\netstandard1.4\Supperxin.SendCloud.dll" />
</files>
</package>
发布 Nuget package
发布 Nuget package的命令格式如下:
dotnet nuget push [xxxx.nupkg] -k [api key] -s https://www.nuget.org/api/v2/package
api key 可以在 Nuget 网站上注册账号之后获得:
图片:
发布完成之后,可以在网站上看到 Package 的信息:
注意,Package需要等 Nuget 完成索引之后才能被其他人使用,
调用 Nuget package
索引完成之后,就可以通过Nuget Package Manager搜索和下载了,完成之后,Package的应用会自动添加到 csproj 文件中,dotnet restore之后就可以使用了。