39
Nuget 介介 介介介介介介介 package Alan Tsai 2016-05-13 1

Nuget介紹- 如何使用和建立自己的package

Embed Size (px)

Citation preview

Page 1: Nuget介紹- 如何使用和建立自己的package

1

Nuget 介紹如何使用和建立 package

Alan Tsai

2016-05-13

Page 2: Nuget介紹- 如何使用和建立自己的package

2Agenda

什麼是 nuget ? 為什麼要有 nuget

使用 nuget package

建立自己的 package Nuget Package Explorer Nuget 結構 使用 csproj 使用 nuspec

Page 3: Nuget介紹- 如何使用和建立自己的package

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

4

什麼是 nuget ?該如何使用?

Page 5: Nuget介紹- 如何使用和建立自己的package

5什麼是 Nuget

Package Manager 方便安裝 library 自動安裝 library 所需要的 dependency 管理 library 的版本 – 自動更新 再也不用因為忘記安裝 xxx 導致網站無法執行

同等於其他系統的: Java – Maven Node – NPM Javascript - Bower

Page 6: Nuget介紹- 如何使用和建立自己的package

6名詞定義 nuget 可以代表兩個意思1. Library package

例如,你可以去安裝 xxx nuget

2. 代表 nuget org Nuget.org 是微軟 host package 的地方

Page 7: Nuget介紹- 如何使用和建立自己的package

7如何使用 可以從 GUI 的方式 或者可以用 Package Manager Console

Page 9: Nuget介紹- 如何使用和建立自己的package

9GUI 的方式 注意一下左邊是切換目前模式 在第 2 點可以切換是否使用 Pre Release 版本

                                                                                                                                                                                                                                                 VS 

Page 10: Nuget介紹- 如何使用和建立自己的package

10Package Manager Console

從 Visual Studio 的 Tool -> Nuget Package Manager -> Package Manager Console 來打開

能夠直接輸入指令:Install-Package Newtonsoft.Json

Page 11: Nuget介紹- 如何使用和建立自己的package

11使用 nuget 對專案會加入什麼 在 solution 層級會加入一個 packages 資料夾

這個會放下載下來的 nuget package 可加入或不加入版控

在 project 等級會加入 packages.config 這個會記錄這個 project 用到什麼 package 一定要加入版控 一個 xml 檔案 在未來的 .Net 這個檔案會換成 json 檔案

Page 12: Nuget介紹- 如何使用和建立自己的package

12回復 Package 資料夾 如果 Package 沒有版控 什麼都不用做

VS 啟動自動回復 Package Nuget 2.7 之後支援

Page 13: Nuget介紹- 如何使用和建立自己的package

13Nuget package 的 gitignore

# 忽略 NuGet Packages*.nupkg

# 忽略下載 packages 的資料夾 **/packages/*

# 但是保留 build/ 資料夾 , 用作於 package 的 MSBuild target.!**/packages/build/

# 下面這行可有可無 - 就算沒有也會自動產生#!**/packages/repositories.config

Page 14: Nuget介紹- 如何使用和建立自己的package

14

建立自己的 nuget package

Page 15: Nuget介紹- 如何使用和建立自己的package

15

了解 nuget package 結構

Page 17: Nuget介紹- 如何使用和建立自己的package

17Nuget package 結構 四個特殊資料夾 lib

放 library ,自動加入 project reference

content 非 library 類型要加入專案的內容

tools 安裝 package 的時候,可以執行的 powershell script

build 加入到 MSBuild 的 Target

Page 18: Nuget介紹- 如何使用和建立自己的package

18Nuget package meta 資訊 NPE 左邊的就是 meta 資訊 比較重要:

Id :這個是唯一值 當用 Package Management Console 做 Install-Package 的時候用的

Title: 名稱 Version: library 的版本 Release Note :版本調整內容 Dependency :這個 package 還需要那些其他的 package 才能運作

Page 19: Nuget介紹- 如何使用和建立自己的package

19建立 nuget 的方式 NPE 建立 使用 nuspec 配上 project 檔案 只有 nuspec 檔案

Page 20: Nuget介紹- 如何使用和建立自己的package

20

NPE 建立

Page 21: Nuget介紹- 如何使用和建立自己的package

21NPE 建立 打開 NPE 選擇 Create a new package

左邊 meta 資訊輸入完 右邊開始加入檔案

lib content

Page 22: Nuget介紹- 如何使用和建立自己的package

22NPE 建立的優缺點 優點

直覺 好操作

缺點 不同人做可能結果不同 無法自動化

結論 用來了解就好,不建議用這個方式

Page 23: Nuget介紹- 如何使用和建立自己的package

23

nuspec + project

Page 24: Nuget介紹- 如何使用和建立自己的package

24Nuspec 配上 Project

思考一下 其實 project 建立出來不就是 dll

如果有用其他 library 不就是 Dependency

meta 有些資訊其實 project 就有了 例如:版本

Nuget 有提供 nuspec 檔案配上 project Nuspec 提供一些 meta 資訊 Project 就是 dll 產生處

Page 25: Nuget介紹- 如何使用和建立自己的package

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

26Nuspec 配上 project – project 設定 Project\Properties\AssemblyInfo.cs

設定的值會帶過去

Page 27: Nuget介紹- 如何使用和建立自己的package

27Nuspec 配上 project

執行

加一些 build 參數例如 使用 release :

產生

nuget pack {csproj location} -build

{id}{ 版號 }.nupkg

nuget pack {csproj location} -build -Prop Configuration=Release

Page 28: Nuget介紹- 如何使用和建立自己的package

28Nuspec 配上 project

優點 自動把 build 內容放到 lib 資料夾 自動把檔案放到 content 自動加入任何 nuget Dependency

缺點 不一定所有 content 都要放

可以執行 nuget 的時候加上 – exclude 來過濾不加入 不適合一個 package 要

包多個 project 的 dll 同 dll 要有多個 framework 的版本在同個 package

結論 一般一個專案一個 package 很適合這種類型

Page 29: Nuget介紹- 如何使用和建立自己的package

29

只使用 nuspec

Page 30: Nuget介紹- 如何使用和建立自己的package

30只使用 nuspec

Nuspec 設定 package meta 資訊 Package 內容則是從 nuspec 檔案的目前位置的其他內容組成

Page 31: Nuget介紹- 如何使用和建立自己的package

31為什麼想使用這種模式 Package 裡面內容不一定只是從單一 project 出來 或許這個 package 提供不同 target .net framework 的 dll

任何 .net framework project 只需要裝同一個 package 而不用考慮 .net framework 版本是否正確

或許這個 package 包含 1 個 project 以上的 dll 才有作用

Page 32: Nuget介紹- 如何使用和建立自己的package

32使用方式 – 設定 Nuspec 一樣用來提供 package meta 資訊

空的 nuspec 檔案可以用指令 產生

要放入 package 內容則是依照 nuspec 位置的檔案結構而放 例如,我想建立一個和 NPE 範例一樣的 package ,我的結構會是:

兩個資料夾內容會進入 package content

lib

nuget spec

Page 33: Nuget介紹- 如何使用和建立自己的package

33使用方式 – 建立 package

執行

產生nuget pack {nuspec 路徑 }

{id}{ 版號 }.nupkg

Page 34: Nuget介紹- 如何使用和建立自己的package

34

測試建立出來的 Package

Page 35: Nuget介紹- 如何使用和建立自己的package

35設定 Visual Studio 的 Package 位置 可以在 VS 搜索 nuget – 選擇 Package Source 建立一個新的 file system 的位置 把剛剛 nupkg 丟進去就可以了

Page 36: Nuget介紹- 如何使用和建立自己的package

36

結語

Page 37: Nuget介紹- 如何使用和建立自己的package

37建立 package 方式總結建立方式 優點 缺點 使用情景

Nuget Package Explorer

• 直覺 – 填入欄位就好

• 簡單操作 – 不需要懂內部結構

• 每個人建立出來可能不同

• 無法自動化• 建立一次性

package

• 學習建立 package

Nuspec + project

• 建立出來 dll 自動放入 lib

• 專案其他檔案自動放入 content

• 可以自動化

如果 package 內容不止在一個 project 裡面,不方便加入

一個 project 代表一個nuget package

Nuspec

• 加入 package 的內容自動從 nuspec目錄下面取得

• 可以加入任意檔案• 可以自動化

會需要一些 script 比較容易產生

如果一個 project 不能夠簡單建立出一個package

Page 39: Nuget介紹- 如何使用和建立自己的package

39

謝謝大家Q & A