1、去nuget.exe地址,下载nuget.exe程序,可以放在任意目录
2、设置path系统变量,将nuget.exe的目录添加到path变量里。以nuget.exe放在vic用户目录,系统为win10为例,我的电脑-右键-属性-高级系统设置-系统变量-选择path-编辑-将nuget.exe所在目录添加到path变量里。
图片.png图片.png图片.png图片.png图片.png
3、采用 基于约定的工作目录 的方式创建包

  • 创建个nuget的工作目录,比如叫nugettest,为了将所有的包目录都放在一起,此步骤可以省略
  • 里面继续创建个要打包的dll目录,比如叫cad2008
  • 然后在cad2008的目录下面创建nuget包最小的约定的目录,即建立一个lib目录,lib目录里建立要支持的net版本的目录,比如支持net3.5,就创建net35。现在的cad2008里的目录结构: \cad20008\lib\net35\
  • 将要打包的dll文件全部拷贝到net35目录里。
  • 在cad2008目录下打开cmd或者powershell,然后运行命令:nuget spec,会生成一个Package.nuspec文件。
  • 修改Package.nuspec文件的内容

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <package >
    3. <metadata>
    4. <id>AutoCad.Net.2008</id>
    5. <version>1.0.0</version>
    6. <title>AutoCad 2008 .Net API</title>
    7. <authors>vicwjb</authors>
    8. <owners>vicwjb</owners>
    9. <requireLicenseAcceptance>false</requireLicenseAcceptance>
    10. <description>AutoCad 2008 .Net API</description>
    11. <summary>It contains acmgd.dll acdbmgd.dll.</summary>
    12. <releaseNotes>The first release.</releaseNotes>
    13. <tags>AutoCad AutoCad-2008</tags>
    14. </metadata>
    15. </package>
    • 第4行为要创建的包的名字
    • 第5行为版本号,建议采用x.x.x.x这种格式
    • 第6行为标题名
    • 第7行为作者
    • 第8行为dll的所有者
    • 第9行为是否要用户同意许可协议
    • 第10行为包描述
    • 第11行包摘要
    • 第12行发行说明
    • 第13行为搜索关键词
  • 修改完Package.nuspec文件的内容后保存,并在cad2008目录里运行 nuget pack .\Package.nuspec生成nuget包。

什么是.nuspec清单文件

nuspec文件是一个xml格式的清单文件,它用于描述包的内容和驱动包的生成过程。下面是一个典型的nuspec文件定义:

  1. <?xml version="1.0"?>
  2. <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  3. <metadata>
  4. <!-- 包的id,在托管库内必须唯一 -->
  5. <id>xxx.xxx.xxx</id>
  6. <!-- 解析依赖项时使用的包版本号 -->
  7. <version>1.0.0.1</version>
  8. <!-- 在库中显示的作者 -->
  9. <authors>nizhenghua</authors>
  10. <!-- 库的拥有者,便于用户能够轻松的获取到该拥有者发布的其他的包 -->
  11. <owners>nizhenghua</owners>
  12. <!-- 项目的许可和地址(比如将源代码发布到Github上时可以在此填写许可和) -->
  13. <licenseUrl>http://opensource.org/licenses/MS-PL</licenseUrl>
  14. <projectUrl>http://github.com/nizhenghua</projectUrl>
  15. <!-- 在Visual Studio中的可视化包管理器中展示的图标 -->
  16. <iconUrl>http://xxxxxxxxxx.png</iconUrl>
  17. <!-- 在用户安装包的时候是否提示接受许可信息 -->
  18. <requireLicenseAcceptance>false</requireLicenseAcceptance>
  19. <!-- 发布记录 -->
  20. <releaseNotes>Bug fixes and performance improvements</releaseNotes>
  21. <!-- 包的描述信息 -->
  22. <description>xxxxxxxxxxxxxxxxx</description>
  23. <!-- 版权 -->
  24. <copyright>Copyright ©2016 xxxxx</copyright>
  25. <!-- 标签,用户可通过标签进行搜索 -->
  26. <tags></tags>
  27. <!-- 包的依赖关系,在安装包的时候会自动安装所有依赖 -->
  28. <dependencies>
  29. <dependency id="Newtonsoft.Json" version="9.0" />
  30. </dependencies>
  31. </metadata>
  32. <!-- 当包安装完成的时候会自动展示readme.txt(包不能是依赖项目) -->
  33. <files>
  34. <file src="readme.txt" target="" />
  35. </files>
  36. </package>

nuspec中必须包含以下的信息:

  • id:标识符,在托管库内必须唯一
  • version
  • title:用于在NuGet库中显示
  • authors
  • owners
  • description

除此之外还可以包含releaseNotes、coptright、tags等其他信息。


使用nuget命令行工具创建nuspec清单文件

  • 通过项目创建
    定位到包含csproj项目文件的目录,执行nuget spec
  • 通过已有的dll创建
    nuget spec dll路径
  • 通过基于约定的目录创建 | 文件夹 | 描述 | 安装时的操作 | | —- | —- | —- | | tools | powershell脚本和命令行程序 | 内容会复制到项目,tools文件夹会添加到环境变量 | | lib | dll、xml、pdb等文件 | dll会添加到引用,xml和pdb复制到项目 | | content | 任意文件 | 内容复制到项目根目录 | | build | MSBuild target和props文件 | 自动插入到项目文件(NuGet2.x)或project.json.lock(NuGet3.x) |

设置包类型

  • Dependency:在兼容的前提下可以在任何项目中安装
  • DotnetCliTool:作为.NET CLI的扩展,必须在命令行调用,且只能在.NET Core项目中使用
  • Custome

创建NuGet包

nuget pack xxx.nuspec
nuget pack xxx.csproj
如果在当前nuspec清单文件夹下使用命令可以简写:nuget pack

编译设置

nuget pack xxx.csproj -properties Configuration = Release

包含符号文件

使用 nuget pack xxx.csproj -symbols 将符号信息一起打进包内

依赖项的版本号设置

可以在nuspec清单中自行设置对其他包的依赖信息。例如:

  1. <dependencies>
  2. <dependency id="Newtonsoft.Json" version="9.0" />
  3. <dependency id="EntityFramework" version="6.1.0" />
  4. </dependencies>

设置的依赖项会在该包安装完成后自行安装。其中最重要的属性就是Version,一个包通过不停的更新迭代可能会有多个版本,可以通过Version来指定依赖的是包的哪个版本。NuGet也提供了一组指定版本范围的符号使得我们可以更加灵活的设置依赖项的版本号。

符号 应用规则 描述
1.0 x >= 1.0 大于等于1.0版本
(,1.0) x < 1.0 小于1.0版本
(1.0,) x > 1.0 大于1.0版本
[,1.0] x <= 1.0 小于等于1.0版本
[1.0,] x >= 1.0 大于等于1.0版本
(1.0,2.0] 1.0 < x <= 2.0 大于1.0版本,小于等于2.0

这种表示方法和数学上的集合类似,小括号表示的区间不包含端点,中括号包含端点

3.4版本后对版本号会做一些特殊处理

  • 删除版本号的前导0 如1.00.1会被处理成1.0.1
  • 删除版本号第四部分的0 如1.0.1.0会被处理成1.0.1

在2.5版本之前,如果在安装包的过程中已经安装了依赖的包,那么会自动升级到最新的版本,2.5之后的版本不会再安装已经存在的包