創建NuGet包
在創建一個NuGet包之前我們應該先創建一個以.nuspec
為后綴的xml清單文件,這個清單文件描述了包的內容,在安裝NuGet包的過程中這個清單文件扮演者很重要的角色。實際上它的作用就像app.config一樣,並且是不可或缺的一部分,因此在了解如何創建一個NuGet包之前很有必要了解一下什么是nuspec
清單文件。
什么是.nuspec清單文件
nuspec文件是一個xml格式的清單文件,它用於描述包的內容和驅動包的生成過程。下面是一個典型的nuspec文件定義:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<!-- 包的id,在托管庫內必須唯一 -->
<id>xxx.xxx.xxx</id>
<!-- 解析依賴項時使用的包版本號 -->
<version>1.0.0.1</version>
<!-- 在庫中顯示的作者 -->
<authors>nizhenghua</authors>
<!-- 庫的擁有者,便於用戶能夠輕松的獲取到該擁有者發布的其他的包 -->
<owners>nizhenghua</owners>
<!-- 項目的許可和地址(比如將源代碼發布到Github上時可以在此填寫許可和) -->
<licenseUrl>http://opensource.org/licenses/MS-PL</licenseUrl>
<projectUrl>http://github.com/nizhenghua</projectUrl>
<!-- 在Visual Studio中的可視化包管理器中展示的圖標 -->
<iconUrl>http://xxxxxxxxxx.png</iconUrl>
<!-- 在用戶安裝包的時候是否提示接受許可信息 -->
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<!-- 發布記錄 -->
<releaseNotes>Bug fixes and performance improvements</releaseNotes>
<!-- 包的描述信息 -->
<description>xxxxxxxxxxxxxxxxx</description>
<!-- 版權 -->
<copyright>Copyright ©2016 xxxxx</copyright>
<!-- 標簽,用戶可通過標簽進行搜索 -->
<tags></tags>
<!-- 包的依賴關系,在安裝包的時候會自動安裝所有依賴 -->
<dependencies>
<dependency id="Newtonsoft.Json" version="9.0" />
</dependencies>
</metadata>
<!-- 當包安裝完成的時候會自動展示readme.txt(包不能是依賴項目) -->
<files>
<file src="readme.txt" target="" />
</files>
</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清單中自行設置對其他包的依賴信息。例如:
<dependencies>
<dependency id="Newtonsoft.Json" version="9.0" />
<dependency id="EntityFramework" version="6.1.0" />
</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之后的版本不會再安裝已經存在的包