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之后就可以使用了。

    参考:

  • 相关阅读:
    Jmeter中的几个重要测试指标释义
    Hibernate无主键配置文件编写
    Hibernate各种主键生成策略与配置详解
    安装禅道的基本步骤
    使用Jmeter进行http接口测试
    myeclipse如何修改Web项目名称
    oracle中根据时间获取最新的一条数据
    JQuery之滑动幻灯片插件Easy Slider初体验
    比较实用的JavaScript库
    UBUNTU下SUBLIME TEXT3的安装+破解+汉化+中文输入
  • 原文地址:https://www.cnblogs.com/windchen/p/7191294.html
Copyright © 2011-2022 走看看