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

Preview:

Citation preview

1

Nuget 介紹如何使用和建立 package

Alan Tsai

2016-05-13

2Agenda

什麼是 nuget ? 為什麼要有 nuget

使用 nuget package

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

3關於我 Alan Tsai Web Developer - 主要後端技術使用 .Net/C# 和 Asp .Net Mvc

喜歡學一些新的東西 Blog

Alan Tsai 的學習筆記 (http://blog.alantsai.net/) Linkedin: http://linkedin.alantsai.net alan@alantsai.net

4

什麼是 nuget ?該如何使用?

5什麼是 Nuget

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

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

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

例如,你可以去安裝 xxx nuget

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

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

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

                                                                                                                                                                                                                                                 VS 

10Package Manager Console

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

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

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

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

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

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

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

13Nuget package 的 gitignore

# 忽略 NuGet Packages*.nupkg

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

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

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

14

建立自己的 nuget package

15

了解 nuget package 結構

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

放 library ,自動加入 project reference

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

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

build 加入到 MSBuild 的 Target

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

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

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

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

20

NPE 建立

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

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

lib content

22NPE 建立的優缺點 優點

直覺 好操作

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

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

23

nuspec + project

24Nuspec 配上 Project

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

如果有用其他 library 不就是 Dependency

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

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

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>

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

設定的值會帶過去

27Nuspec 配上 project

執行

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

產生

nuget pack {csproj location} -build

{id}{ 版號 }.nupkg

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

28Nuspec 配上 project

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

缺點 不一定所有 content 都要放

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

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

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

29

只使用 nuspec

30只使用 nuspec

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

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

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

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

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

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

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

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

lib

nuget spec

33使用方式 – 建立 package

執行

產生nuget pack {nuspec 路徑 }

{id}{ 版號 }.nupkg

34

測試建立出來的 Package

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

36

結語

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

Nuget Package Explorer

• 直覺 – 填入欄位就好

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

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

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

package

• 學習建立 package

Nuspec + project

• 建立出來 dll 自動放入 lib

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

• 可以自動化

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

一個 project 代表一個nuget package

Nuspec

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

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

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

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

39

謝謝大家Q & A