nuget介紹- 如何使用和建立自己的package
TRANSCRIPT
![Page 1: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/1.jpg)
1
Nuget 介紹如何使用和建立 package
Alan Tsai
2016-05-13
![Page 2: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/2.jpg)
2Agenda
什麼是 nuget ? 為什麼要有 nuget
使用 nuget package
建立自己的 package Nuget Package Explorer Nuget 結構 使用 csproj 使用 nuspec
![Page 3: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/3.jpg)
3關於我 Alan Tsai Web Developer - 主要後端技術使用 .Net/C# 和 Asp .Net Mvc
喜歡學一些新的東西 Blog
Alan Tsai 的學習筆記 (http://blog.alantsai.net/) Linkedin: http://linkedin.alantsai.net [email protected]
![Page 4: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/4.jpg)
4
什麼是 nuget ?該如何使用?
![Page 5: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/5.jpg)
5什麼是 Nuget
Package Manager 方便安裝 library 自動安裝 library 所需要的 dependency 管理 library 的版本 – 自動更新 再也不用因為忘記安裝 xxx 導致網站無法執行
同等於其他系統的: Java – Maven Node – NPM Javascript - Bower
![Page 6: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/6.jpg)
6名詞定義 nuget 可以代表兩個意思1. Library package
例如,你可以去安裝 xxx nuget
2. 代表 nuget org Nuget.org 是微軟 host package 的地方
![Page 7: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/7.jpg)
7如何使用 可以從 GUI 的方式 或者可以用 Package Manager Console
![Page 8: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/8.jpg)
8GUI 的方式 對專案點右鍵 選擇 Manage Nuget Package
![Page 9: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/9.jpg)
9GUI 的方式 注意一下左邊是切換目前模式 在第 2 點可以切換是否使用 Pre Release 版本
VS
![Page 10: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/10.jpg)
10Package Manager Console
從 Visual Studio 的 Tool -> Nuget Package Manager -> Package Manager Console 來打開
能夠直接輸入指令:Install-Package Newtonsoft.Json
![Page 11: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/11.jpg)
11使用 nuget 對專案會加入什麼 在 solution 層級會加入一個 packages 資料夾
這個會放下載下來的 nuget package 可加入或不加入版控
在 project 等級會加入 packages.config 這個會記錄這個 project 用到什麼 package 一定要加入版控 一個 xml 檔案 在未來的 .Net 這個檔案會換成 json 檔案
![Page 12: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/12.jpg)
12回復 Package 資料夾 如果 Package 沒有版控 什麼都不用做
VS 啟動自動回復 Package Nuget 2.7 之後支援
![Page 13: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/13.jpg)
13Nuget package 的 gitignore
# 忽略 NuGet Packages*.nupkg
# 忽略下載 packages 的資料夾 **/packages/*
# 但是保留 build/ 資料夾 , 用作於 package 的 MSBuild target.!**/packages/build/
# 下面這行可有可無 - 就算沒有也會自動產生#!**/packages/repositories.config
![Page 14: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/14.jpg)
14
建立自己的 nuget package
![Page 15: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/15.jpg)
15
了解 nuget package 結構
![Page 16: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/16.jpg)
16Nuget Package Explorer (NPE)
https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application
可以用來了解和建立 package – 打開 Json.Net
![Page 17: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/17.jpg)
17Nuget package 結構 四個特殊資料夾 lib
放 library ,自動加入 project reference
content 非 library 類型要加入專案的內容
tools 安裝 package 的時候,可以執行的 powershell script
build 加入到 MSBuild 的 Target
![Page 18: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/18.jpg)
18Nuget package meta 資訊 NPE 左邊的就是 meta 資訊 比較重要:
Id :這個是唯一值 當用 Package Management Console 做 Install-Package 的時候用的
Title: 名稱 Version: library 的版本 Release Note :版本調整內容 Dependency :這個 package 還需要那些其他的 package 才能運作
![Page 19: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/19.jpg)
19建立 nuget 的方式 NPE 建立 使用 nuspec 配上 project 檔案 只有 nuspec 檔案
![Page 20: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/20.jpg)
20
NPE 建立
![Page 21: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/21.jpg)
21NPE 建立 打開 NPE 選擇 Create a new package
左邊 meta 資訊輸入完 右邊開始加入檔案
lib content
![Page 22: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/22.jpg)
22NPE 建立的優缺點 優點
直覺 好操作
缺點 不同人做可能結果不同 無法自動化
結論 用來了解就好,不建議用這個方式
![Page 23: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/23.jpg)
23
nuspec + project
![Page 24: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/24.jpg)
24Nuspec 配上 Project
思考一下 其實 project 建立出來不就是 dll
如果有用其他 library 不就是 Dependency
meta 有些資訊其實 project 就有了 例如:版本
Nuget 有提供 nuspec 檔案配上 project Nuspec 提供一些 meta 資訊 Project 就是 dll 產生處
![Page 25: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/25.jpg)
25Nuspec 配上 project – nuspec 設定 設定
Nuspec 檔案檔名同 project ,並且在同資料夾 例如有個
Net35Library.csprojNet35Library.nuspec
Nuspec 檔案內容 $$ 參數是會從專案傳入
<?xml version="1.0"?><package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> </metadata></package>
![Page 26: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/26.jpg)
26Nuspec 配上 project – project 設定 Project\Properties\AssemblyInfo.cs
設定的值會帶過去
![Page 27: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/27.jpg)
27Nuspec 配上 project
執行
加一些 build 參數例如 使用 release :
產生
nuget pack {csproj location} -build
{id}{ 版號 }.nupkg
nuget pack {csproj location} -build -Prop Configuration=Release
![Page 28: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/28.jpg)
28Nuspec 配上 project
優點 自動把 build 內容放到 lib 資料夾 自動把檔案放到 content 自動加入任何 nuget Dependency
缺點 不一定所有 content 都要放
可以執行 nuget 的時候加上 – exclude 來過濾不加入 不適合一個 package 要
包多個 project 的 dll 同 dll 要有多個 framework 的版本在同個 package
結論 一般一個專案一個 package 很適合這種類型
![Page 29: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/29.jpg)
29
只使用 nuspec
![Page 30: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/30.jpg)
30只使用 nuspec
Nuspec 設定 package meta 資訊 Package 內容則是從 nuspec 檔案的目前位置的其他內容組成
![Page 31: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/31.jpg)
31為什麼想使用這種模式 Package 裡面內容不一定只是從單一 project 出來 或許這個 package 提供不同 target .net framework 的 dll
任何 .net framework project 只需要裝同一個 package 而不用考慮 .net framework 版本是否正確
或許這個 package 包含 1 個 project 以上的 dll 才有作用
![Page 32: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/32.jpg)
32使用方式 – 設定 Nuspec 一樣用來提供 package meta 資訊
空的 nuspec 檔案可以用指令 產生
要放入 package 內容則是依照 nuspec 位置的檔案結構而放 例如,我想建立一個和 NPE 範例一樣的 package ,我的結構會是:
兩個資料夾內容會進入 package content
lib
nuget spec
![Page 33: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/33.jpg)
33使用方式 – 建立 package
執行
產生nuget pack {nuspec 路徑 }
{id}{ 版號 }.nupkg
![Page 34: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/34.jpg)
34
測試建立出來的 Package
![Page 35: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/35.jpg)
35設定 Visual Studio 的 Package 位置 可以在 VS 搜索 nuget – 選擇 Package Source 建立一個新的 file system 的位置 把剛剛 nupkg 丟進去就可以了
![Page 36: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/36.jpg)
36
結語
![Page 37: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/37.jpg)
37建立 package 方式總結建立方式 優點 缺點 使用情景
Nuget Package Explorer
• 直覺 – 填入欄位就好
• 簡單操作 – 不需要懂內部結構
• 每個人建立出來可能不同
• 無法自動化• 建立一次性
package
• 學習建立 package
Nuspec + project
• 建立出來 dll 自動放入 lib
• 專案其他檔案自動放入 content
• 可以自動化
如果 package 內容不止在一個 project 裡面,不方便加入
一個 project 代表一個nuget package
Nuspec
• 加入 package 的內容自動從 nuspec目錄下面取得
• 可以加入任意檔案• 可以自動化
會需要一些 script 比較容易產生
如果一個 project 不能夠簡單建立出一個package
![Page 38: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/38.jpg)
38Reference
Nuget doc (官方文件 ) https://docs.nuget.org/ nuspec 檔案內容 https://docs.nuget.org/create/nuspec-reference
Github 範例專案: https://github.com/alantsai-samples/Nuget-Package-Create-Sample
我的部落格 Nuget 使用
http://blog.alantsai.net/2016/03/what-is-nuget-how-to-use-nuget-and-how-to-restore-properly.html
Nuget 檔案結構 http://
blog.alantsai.net/2016/04/create-nuget-with-nuget-package-explorer-understand-nuget-package-structure.html
![Page 39: Nuget介紹- 如何使用和建立自己的package](https://reader035.vdocuments.mx/reader035/viewer/2022062218/5872a8fb1a28ab07208b747d/html5/thumbnails/39.jpg)
39
謝謝大家Q & A