zoukankan      html  css  js  c++  java
  • NuGet使用

    初识NuGet及快速安装使用  

    NuGet是 Visual Studio的一个扩展,也就是管理程序的包包。

    使用NuGet可以替代之前引用DLL文件的方式,如果Nuget库中存在需要的动态库的话。

    参考:NuGet学习笔记(1) 初识NuGet及快速安装使用

    打包自己的类库至Nuget

    首先编写自己的类库项目,然后打包

    • 图形化界面方式

    1、下载包管理器 NuGetPackageExplorer,(貌似 现在win10才行,所以我选择了命令行方式)顾名思义,包包管理器可以用来创建新的类库包,也可以浏览已经创建好的类库包

    2、下载完成后,双击 NuGetPackageExplorer.application 进行安装,

    双击NuGet Package Explorer出现启动界面,选择Create a new package(Ctrl+N)创建一个新包

    3、选择菜单 Edit > Edit Package Metadata (或者 CTRL + K) 编辑包包信息
      这里可以编辑类库包的信息和添加类库、程序集的引用解释下几个比较重要的字段
      Id:用于定位类库包的唯一标示,如在命令行下执行 Install-Package MyPackage 这里的MyPackage就是包包的Id值
      Version:类库的版本号,这里建议和程序集的真实版本号保持一致,以免发生混淆
      Dependencies:此类库依赖的程序集,根据实际情况添加依赖类库的Id和版本号,若无留空即可,这里需要注意下填写的依赖类库需要在NuGet服务器上能找到,否则无法完成自动引用添加
      Framework assemblies:依赖的Framework 程序集,根据实际需要选择即可,一般无需设置

      除以上四项以外其他属性根据实际情况修改即可,若自己用不修改也中,不过为了使用方便还是建议把类库描述(Description)填写下

    4、编辑好包包信息后接下来添加DLL到包包中
      可以选择 右键-->Add Existinng File... 选择dll添加,也可以直接拖拽DLL到 Package contents 窗口,此例选择拖拽方式

      直接拖拽dll到窗口后,会出现提示:是否将 Winista.HtmlParser.dll放到lib 文件夹下,一般我们选择是

    5、信息修改和dll都添加完毕后,选择File --> Save(或Ctrl + S)将文件进行保存,默认文件名为Id + 版本号.nupkg

    6、完成保存后如需要发布到网上,选择File--> Publish...(或Ctrl + P)
      默认的发布地址是官网,发布 Key需要到官网去注册一个账号,然后就可以得到,这里不在复述,若无需发布直接关闭即可

    参考:NuGet学习笔记(2) 使用图形化界面打包自己的类库

    • 命令行方式

    打包一个类库,并发布到官网。在开始之前需要在www.nuget.org上注册一个账号,下载最新版本的nuget命令行工具https://dist.nuget.org/win-x86-commandline/latest/nuget.exe【官网上下载】,只是一个exe文件,直接添加到环境变量中。

    1.修改项目程序集信息AssemblyInfo.cs

    using System.Reflection;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;
    
    // 有关程序集的一般信息由以下
    // 控制。更改这些特性值可修改
    // 与程序集关联的信息。
    [assembly: AssemblyTitle("SY.Filer")]
    [assembly: AssemblyDescription("文件操作帮助类,可以快速运用需要文件操作的应用中")]
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("SY")]
    [assembly: AssemblyProduct("SY.Filer")]
    [assembly: AssemblyCopyright("Copyright © Microsoft 2019")]
    [assembly: AssemblyTrademark("")]
    [assembly: AssemblyCulture("")]
    
    // 将 ComVisible 设置为 false 会使此程序集中的类型
    //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
    //请将此类型的 ComVisible 特性设置为 true。
    [assembly: ComVisible(false)]
    
    // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
    [assembly: Guid("62c2e0a8-d1f5-4547-92a0-ba19346883a4")]
    
    // 程序集的版本信息由下列四个值组成: 
    //
    //      主版本
    //      次版本
    //      生成号
    //      修订号
    //
    // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
    //通过使用 "*",如下所示:
    // [assembly: AssemblyVersion("1.0.*")]
    [assembly: AssemblyVersion("1.0.0.0")]
    [assembly: AssemblyFileVersion("1.0.0.0")]
    View Code

    2.命令行下使用nuget spec命令生成SY.Filer.nuspec打包配置文件

    打开命令行定位到SY.Filer项目所在目录,输入命令:nuget spec

    修改生成的nuspec文件,内容如下:

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <title>$title$</title>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <license type="Expression">MIT</license>
         <projectUrl>https://www.cnblogs.com/peterYong/</projectUrl>
        <iconUrl>https://pic.cnblogs.com/face/727485/20190531113306.png</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>$description$</description>
        <releaseNotes>文件操作帮助类,可以快速运用需要文件操作的应用中</releaseNotes>
        <copyright>Copyright 2019</copyright>
        <tags>SY</tags>
      </metadata>
    </package>

    注意:

    <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>  不要使用licenseUrl,已经弃用了,否则上传官网后 会提示你去修改它
    iconUrl 会显示在你搜索 nuget包时显示的
    releaseNotes 其实最好用英文

    3.打包类库

    打开命令行定位到SY.Filer项目所在目录,输入命令:nuget pack SY.Filer.csproj

    可能的报错:Description is Required

    需要在命令后面增加参数 -Properties Description="  "  尽量用英文
    参考:https://stackoverflow.com/questions/40570795/nuget-exe-pack-warning-description-was-not-specified-using-description

    4.发布类库

    登陆www.nuget.org网站,打开https://www.nuget.org/packages/manage/upload地址

    点击“Upload”上传后,显示信息确认页面,然后点击 “Submit”,发布完成。

    若报错  Nuget上传包提示<licenseUrl> element will be deprecated的解决方法

    过了一会,状态就ok了。

    然后就可以在Nuget中搜索到了。

    参考:使用nuget打包类库并发布

    搭建属于自己的NuGet服务器

    在下载Nuget包的时候通常有个source可以选择和配置

    其实这里的source可以自己搭建。

    创建NuGetServer Web站点

    1.新建Web站点,选择 文件-->新建项目-->Asp.Net 空 Web应用程序

    2.选择 工具-->Library Package Manager-->Package Manager Console 打开NuGet命令行控制台

    3.在控制台输入Install-Package NuGet.Server (请保持Package source:官方源,即 Nuget offical package source,一般默认即为官方Package源)

    4.回车确认后开始下载并安装NuGet.Server类库及相关引用,并自动添加引用到项目
      注:具体输出根据版本不同会略有不同

    5.在控制台输入 Get-Package 可以看到刚刚安装的类库

    6.至此NuGet.Server站点已经创建完毕,恩,你没有看错,就是这么简单,接下来部署到本地或IIS站点即可使用了

    发布站点到IIS

    1.发布网站到本地

    2.IIS里面建立站点www.mynuget.com,主机头www.mynuget.com,应用程序池为.Net4.0集成模式,目录指向站点发布的目录

    3.设置hosts 将www.mynuget.com指向本机

      127.0.0.1 www.mynuget.com

    4.设置好hosts后,重新打开浏览器输入网址:http://www.mynuget.com/

    5.查看已经发布的类库包 http://www.mynuget.com/nuget/Packages (可以把已经打好包的类库放到网站下的Packages文件夹下即可)

    添加本地站点到包包数据源

    1.选择 工具-->Library Package Manager-->Package Manager Settings 

    2.输入名称 MyNuGetServer及包包源地址 http://www.mynuget.com/nuget 点击Add完成源添加

    3.查看刚刚添加的类库源 工具-->Library Package Manager-->Manager NuGet Packages for Solution... 点击刚添加的源MyNuGetServer可以看到我们放到站点下的类库包,选中需要的包包点击 Install完成安装

    参考:搭建属于自己的NuGet服务器

    Nuget核心

    它就是一个包(package)管理平台,确切的说是 .net平台的包管理工具,它提供了一系列客户端用于生成,上传和使用包(package),以及一个用于存储所有包的中心库即NuGet Gallery,如果有需要也可以搭建自己的私有NuGet库。

    NuGet包的本质是一个以nupkg为后缀的zip压缩文件(你可以将后缀改为.zip后解压查看里面的内容),其中包含了编译后的Dll文件以及其他相关文件。下图显示nuget包从创建,上传到被使用的流程。

    我们的项目文件 有一句

    <TargetFramework>netcoreapp2.0</TargetFramework>

    该项目的TargetFramework为netcoreapp2.0,这里的netcoreapp2.0 就是TFMs,即Tagrget Framework Monikers 翻译过来就是“目标框架别名”,这个值指定了这个项目是跑在哪个Framework上的。

    1)你的项目要使用哪些API?2)你项目要兼容哪些Framework?

    总的来说:

    1. 选择更高的版本,你将有更多的API可以使用。(更丰富的API)
    2. 选择更低的版本,有更多的项目可以使用你的库。(更好的兼容性)

    所以 .net standard的选择原则就是:在API够用的情况下选择尽量低的 .net standard标准。这需要根据实际的项目需求来进行判断。

    我们在Nuget上引入包,eg:Newtonsoft.Json,在项目文件夹下并不能找到dll,包在哪?其实包被下载到了一个nuget公共目录,在我的Windows10系统上是 C:Userswangl.nugetpackages,这样nuget包就不会被重复下载。而在项目中nuget仅仅将依赖信息写入了csproj项目文件与obj文件夹中的project.assets.json,其中csproj项目文件中的内容如下,

     <ItemGroup>
        <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
      </ItemGroup>

    包所依赖的内容并不会被打包到最后的.nupkg文件中,NuGet只是将依赖信息写入包,在最终使用这些包的应用程序编译时还原所有的依赖

    Nuget会帮我们管理所有包的依赖并且对于被多次引用的包,Nuget会找出满足该包所有使用者的版本。

    其中重要的依赖关系(部分)如下,

     “如果你项目的目标框架也是.NETFramework 2.0,那么你就不需要依赖任何其它包就可以使用这个包”。同样的下面.NETFramework 1.0的含义就是:“如果你的项目的目标框架为.NETFramework 1.0那么需要引用下面的包后才能使用该包。”不过这些都不需要你手动去引用,NuGet会在你安装该包时自动安装其依赖的包。

    参考:NuGet是什么?理解与使用(上)

  • 相关阅读:
    mysql ndb笔记
    oracle asmlib下载地址
    mysqldump
    mysqlsrlib
    AFDownloadRequestOperation
    [iphone]Code Sign error: Provisioning profile XXXX can"t be found
    cocos2d粒子效果
    如何以最好的方式实现游戏关卡
    关于autorelease pool一个较好的理解
    cocos2d场景转换的方法执行顺序
  • 原文地址:https://www.cnblogs.com/peterYong/p/10954296.html
Copyright © 2011-2022 走看看