使用 dotnet CLI 来打包和发布 .NET Core nuget package

原文链接:使用 dotnet CLI 来打包和发布 .NET Core nuget package

如何使用 visual studio 2015/2017 打包和发布 Nuget package, 微软在这里有介绍:

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 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 ValueMSBuild PropertyDefaultNotes
IdPackageIdAssemblyName$(AssemblyName) from msbuild
VersionPackageVersionVersionNew $(Version) property from msbuild, is semver compatible. Could be “1.0.0”, “1.0.0-beta”, or “1.0.0-beta-00345”.
AuthorsAuthorsusername of the current user will be the default value
TitleTitleempty
OwnersN/ANot present in NuSpec
DescriptionDescription"Package Description"
CopyrightCopyrightempty
RequireLicenseAcceptancePackageRequireLicenseAcceptancefalse
LicenseUrlPackageLicenseUrlempty
ProjectUrlPackageProjectUrlempty
IconUrlPackageIconUrlempty
TagsPackageTagsempty
ReleaseNotesPackageReleaseNotesempty
RepositoryUrlRepositoryUrlempty
RepositoryTypeRepositoryTypeempty
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 网站上注册账号之后获得:

图片:

6df342ae-116e-472b-be89-a22d45cec059.jpg

发布完成之后,可以在网站上看到 Package 的信息:

a6d327a5-d2b8-4d8b-9441-e3acc9330e32.jpg

注意,Package需要等 Nuget 完成索引之后才能被其他人使用,

调用 Nuget package

索引完成之后,就可以通过Nuget Package Manager搜索和下载了,完成之后,Package的应用会自动添加到 csproj 文件中,dotnet restore之后就可以使用了。

9d2f7847-75ac-4245-b495-56520d8b18b3.jpg

78dda118-d44d-47ef-be25-2d8990d71b2a.jpg

b97d015b-1732-489f-902a-b815650019cf.jpg

参考:

转载于:https://www.cnblogs.com/windchen/p/7191294.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值