• .net 温故知新:【4】NuGet简介和使用


    在包管理以前我们在项目中引用第三方包通常是去下载dll放到项目中再引用,后来逐渐发展成各种包管理工具,nuget就是一种工具,适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建、共享和使用有用的代码。 通常,此类代码捆绑到“包”中,其中包含编译的代码(如 DLL)以及在使用这些包的项目中所需的其他内容。
    Linux 我们可以使用apt、yum来安装软件,js 可以使用npm来搭建下载,Java 有maven管理包,而对于.net nuget就是同样效果和机制的工具。

    NuGet 客户端工具

    要使用 NuGet,作为软件包使用者或创建者,可以使用命令行接口 (CLI) 工具以及 Visual Studio 中的 NuGet 功能。

    CLI工具可以使用 dotnet CLI 或 nuget.exe CLI。

    dotnet CLI 随某些 Visual Studio 工作负载一起安装,例如 .NET Core 。从 Visual Studio 2017 开始dotnet CLI 将自动随任何与 .NET Core 相关的工作负载一起安装。
    dotnet CLI 适用于 .NET Core 和 .NET Standard 项目(SDK 样式的项目类型),以及任何其他 SDK 样式项目(例如,面向 .NET Framework 的 SDK 样式项目)
    也就是说安装VS的时候会自动包含在工作负载中,对于.net 5 也可以直接安装.NET SDK,如之前.net 知新:【1】 .Net 5 基本概念文章介绍中可以看到.NET SDK是包含了CLI的。
    而对于.NET Framework(仅限非 SDK 样式项目),使用 nuget.exe CLI。这种方式现在基本不使用,因为我们一般不会去单独安装,都是安装VS后直接使用就行了,除非你还在使用Visual Studio 2017 以前的版本。

    至于他们有什么区别呢?

    第一个是以前.NET Framework时期使用包管理的方式是使用单独的 packages.config 文件进行管理。

    但是不建议使用packages.config,.NET Framework可以在VS中右键点击packages.config迁移到PackageReference。

    现在.net 5的项目默认使用 PackageReference,包保留在 global-packages 文件夹中(而不是解决方案中的 packages 文件夹中)。
    PackageReference 仅列出那些直接安装在项目中的 NuGet 包,不会显示引用包所包含的低级依赖更加简洁。

    比如我们使用nuget安装NPOI包,它的依赖如下:

    在.net framework的packages.config文件中看到NPOI和它的依赖项

    在.net 5项目文件中只有NPOI

    第二个就是两个工具的功能有差异

    某些高级功能无法使用的时候我们就需要用命令的方式。

    visual studio 使用 nuget

    在VS里面有两种方式管理nuget包。第一种是右键项目->管理程序nuget包 进入导UI界面。

    可以进行程序包的查找和安装的包管理,对包进行卸载更新。 在右上角有一个程序包源,可以进行包源设置,设置包源地址。默认是将 NuGet.org 用作 NuGet 客户端的包存储库。
    所以我们配置应使用以下 V3 API 终结点:

    https://api.nuget.org/v3/index.json
    

    NuGet.org 是 NuGet 包的公用主机,NuGet 技术还支持在云中(如在 Azure DevOps 上)、在私有网络中或者甚至直接在本地文件系统以私密方式托管包。
    https://www.nuget.org/ 打开NuGet.org站点可以进行包搜索和包的上传等。

    另外一种方式就是工具->nuget管理器->程序包管理器控制台 ,调出控制台后就可以使用cli命令进行nuget包管理了。
    所以有时候我们搜索文章的时候看到别人添加包,命令dotnet add package Newtonsoft.Json 我们要知道这是nuget包添加,程序包管理器控制台执行,或者在ui界面搜索包可视化操作添加,以前的 nuget.exe CLI添加包是install 命令,要注意区分下。

    创建发布包

    首先需要设置属性,创建包需要以下属性。

    • PackageId,包标识符,在托管包的库中必须是唯一的。 如果未指定,默认值为 AssemblyName。
    • Version,窗体 Major.Minor.Patch[-Suffix] 中特定的版本号,其中 -Suffix 标识预发布版本。 如果未指定,默认值为 1.0.0。
    • 包标题应出现在主机上(例如 nuget.org)
    • Authors,作者和所有者信息。 如果未指定,默认值为 AssemblyName。
    • Company,公司名称。 如果未指定,默认值为 AssemblyName。

    在 Visual Studio 中,可以在项目属性中设置这些值(在解决方案资源管理器中右键单击项目,选择“属性” ,然后选择“包” 选项卡)。 也可以直接在项目文件 (.csproj) 中设置这些属性。

    在包的 NuGet.org 页面上所示的包说明可以在 .csproj 文件中的 设置,或者通过 .nuspec 文件中的 $description 拉取。
    .nuspec 文件是包含包元数据的 XML 清单,.nuspec 当你创建包时将生成。

    运行 pack 命令

    运行dotnet pack 命令会打包解决方案中可打包的所有项目,也可以在项目属性上设置“在构建时生成NutGet包”。

    具有 .nupkg 扩展名的 NuGet 包只是一个 zip 文件。 若要轻松查看任何包的内容,只需将扩展名更改为 .zip 并按常规方法展开内容。 尝试将包上传到主机前,请务必将扩展名改回 .nupkg。
    命令执行完成后打包后生成的文件路径会显示在控制台上,到目录查看到ConsoleAppNet5.1.0.0.nupkg 包,并复制一个改成zip验证。

    发布到 nuget.org

    登录到nuget.org,使用 Microsoft 帐户进行登录,然后选择upload上传,选择了文件后会进行自动校验,如果有问题处理后再重新上传。
    还可以通过命令的方式去上传,但是需要api密钥,自己去看下官网好了。

  • 相关阅读:
    Unable to load native-hadoop library for your platform... using builtin-java classes where applica
    Hadoop通过url地址访问HDFS
    Hadoop通过url地址访问HDFS
    Hadoop通过API访问HDFS
    Hadoop通过API访问HDFS
    maven项目测试HDFS读取文件
    maven项目测试HDFS读取文件
    查看镜像文件
    2.决定你是穷人还是富人的12条
    2.row_number() over (partition by col1 order by col2)的用法
  • 原文地址:https://www.cnblogs.com/SunSpring/p/15124900.html
Copyright © 2020-2023  润新知