zoukankan      html  css  js  c++  java
  • 使用 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,默认在 bindebug 路径下

    .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="xxxSupperxin.SendCloudsrcSupperxin.SendCloudinDebug
    etstandard1.4Supperxin.SendCloud.dll" target="lib
    etstandard1.4Supperxin.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="xxxSupperxin.SendCloudsrcSupperxin.SendCloudinDebug
    etstandard1.4Supperxin.SendCloud.dll" target="lib
    etstandard1.4Supperxin.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之后就可以使用了。

    参考:

  • 相关阅读:
    kubernetes 集群YAML文件
    kubernetes 集群搭建 -- 二进制方式
    BetterIntelliJ IDEA失效的解决办法:This license BISACXYELK has been cancelled
    win10下迁移EFI分区表
    Java 8 Optional——避免空指针异常的小工具
    4个常见的IO模型——阻塞、非阻塞、多路复用、异步
    CountDownLatch笔记
    JAVA集合-03ArrayList源码解析和使用实例
    Secure Shell登录
    Kali(2020.4版本)遇到的metasploit启动崩溃问题
  • 原文地址:https://www.cnblogs.com/windchen/p/7191294.html
Copyright © 2011-2022 走看看