Toggle navigation
首页
技术
骑行
羽毛球
资讯
联络我
登录
使用 dotnet CLI 来打包和发布 .NET Core nuget package
2017-07-15
.NET Core
> 本文介绍如何使用 dotnet CLI 来打包和发布 .NET Core nuget package。 如何使用 visual studio 2015/2017 打包和发布 Nuget package, 微软在这里有介绍: [Create and publish a package](https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package) 对于只安装了 vs code 和 .net core sdk 的同学,可以参照本文利用 dotnet CLI 来打包和发布 .NET Core nuget package。 # 打包 Nuget Package 可以使用 dotnet pack 命令来打包已经完成的 .net core library,进入Project所在目录,运行 dotnet pack 命令,会产生如下效果: 1. 根据 .csproj 中定义的属性生成 .nuspec 文件,默认在 obj 路径下 2. 根据 .nuspec 文件,打包成 Nuget package,默认在 bin\debug 路径下 .nuspec文件定义了 Nuget package 需要的一些属性,比如 id,version等,内如如下: ```xml <?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 文件,按照上表的对应关系,我们做如下修改: ```xml <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 <?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之后就可以使用了。    # 参考: * [Adding nuget pack as a msbuild target](https://github.com/NuGet/Home/wiki/Adding-nuget-pack-as-a-msbuild-target) * [Create and publish a package](https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package#publish-the-package) * [dotnet-pack](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-pack) * [適用於 .NET Core 之 csproj 格式的新增項目](https://docs.microsoft.com/zh-tw/dotnet/core/tools/csproj)
×
本文为博主原创,如需转载,请注明出处:
http://www.supperxin.com
返回博客列表