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

More Related Content

PPTX
Designing Data Products
PDF
Data Lakes - The Key to a Scalable Data Architecture
PDF
Graph database Use Cases
PDF
IO Resource Management on Exadata
PPTX
MLflowで学ぶMLOpsことはじめ
PDF
Pinot: Near Realtime Analytics @ Uber
PDF
Designing the Next Generation of Data Pipelines at Zillow with Apache Spark
PPTX
Oracle to Postgres Schema Migration Hustle
 
Designing Data Products
Data Lakes - The Key to a Scalable Data Architecture
Graph database Use Cases
IO Resource Management on Exadata
MLflowで学ぶMLOpsことはじめ
Pinot: Near Realtime Analytics @ Uber
Designing the Next Generation of Data Pipelines at Zillow with Apache Spark
Oracle to Postgres Schema Migration Hustle
 

What's hot (20)

PPTX
Analysis of big data and analytics market in latin america
PPTX
Oracle R-12 Procure To Pay | Oracle R-12 Procure To Pay Training
PPTX
Databricksを初めて使う人に向けて.pptx
PPT
Oim Poc1.0
PPTX
トランザクション入門
PDF
マジックビーンズ
PPTX
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
PPTX
Oracle Goldengate for Big Data - LendingClub Implementation
PDF
5 Critical Steps to Clean Your Data Swamp When Migrating Off of Hadoop
PDF
頑張りすぎないScala
PDF
淺談RESTful API認證 Token機制使用經驗分享
PDF
Landed cost
PPTX
Power BI チュートリアル 導入・初級編
PDF
Self Service Analytics and a Modern Data Architecture with Data Virtualizatio...
PPTX
Building AI Applications using Knowledge Graphs
PPTX
Neo4j GraphSummit London March 2023 Emil Eifrem Keynote.pptx
PDF
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
PDF
20230912JSSST大会基調講演_丸山.pdf
PPTX
Simplifying And Accelerating Data Access for Python With Dremio and Apache Arrow
PDF
チームで1番弱い子がアジャイルレトロスペクティブやってみたら ・・・
Analysis of big data and analytics market in latin america
Oracle R-12 Procure To Pay | Oracle R-12 Procure To Pay Training
Databricksを初めて使う人に向けて.pptx
Oim Poc1.0
トランザクション入門
マジックビーンズ
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 3.7.0対応)
Oracle Goldengate for Big Data - LendingClub Implementation
5 Critical Steps to Clean Your Data Swamp When Migrating Off of Hadoop
頑張りすぎないScala
淺談RESTful API認證 Token機制使用經驗分享
Landed cost
Power BI チュートリアル 導入・初級編
Self Service Analytics and a Modern Data Architecture with Data Virtualizatio...
Building AI Applications using Knowledge Graphs
Neo4j GraphSummit London March 2023 Emil Eifrem Keynote.pptx
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
20230912JSSST大会基調講演_丸山.pdf
Simplifying And Accelerating Data Access for Python With Dremio and Apache Arrow
チームで1番弱い子がアジャイルレトロスペクティブやってみたら ・・・
Ad

Viewers also liked (15)

PPTX
Asp.net mvc 概觀介紹
PPTX
工程師必備第一工具 - Git
PDF
2012.nov.china.nanjing
PDF
Workshop: Paper Prototyping Game
PDF
KSDG BaaS Intro
PDF
電子商務專題:課程簡介 Course Introduction
PDF
REST to RESTful Web Service
PDF
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
PDF
值得一試的小事:打造 UX 導向的產品開發文化
PDF
分析路上你我他/如何學習分析
PPTX
商業價值主張設計:價值地圖 Value proposition design canvas -Canvas
PDF
敏捷开发全景视图(流程、方法和最佳实践)
PDF
那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper
PPTX
Ivo Peksens - What is a Scrum Master?
PPTX
Visual Studio 2017 新功能探索 (Study4.TW)
Asp.net mvc 概觀介紹
工程師必備第一工具 - Git
2012.nov.china.nanjing
Workshop: Paper Prototyping Game
KSDG BaaS Intro
電子商務專題:課程簡介 Course Introduction
REST to RESTful Web Service
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
值得一試的小事:打造 UX 導向的產品開發文化
分析路上你我他/如何學習分析
商業價值主張設計:價值地圖 Value proposition design canvas -Canvas
敏捷开发全景视图(流程、方法和最佳实践)
那些你知道的,但還沒看過的 Big Data 風景 ─ 致 Hadooper
Ivo Peksens - What is a Scrum Master?
Visual Studio 2017 新功能探索 (Study4.TW)
Ad

More from Alan Tsai (20)

PDF
初探 Prompt Flow 開發生成式 AI 應用的利器 | R-Ladies Taipei
PDF
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
PDF
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
PDF
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
PDF
Microsoft Learn AI 挑戰賽-實戰三 MLOps | Alan Tsai
PPTX
2021 Net Conf Taiwan-初探 Azure Communication Service 讓 App 也有視訊、通話、即時聊天、簡訊和電話功能
PDF
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
PPTX
我和阿九(Azure)有約 17 Azure Sql Database 基本介紹
PPTX
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
PDF
架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務
PPTX
我和阿九Azure有約 39 Azure Blob Storage 如何省錢? 設定 Access Tier 以及透過 Lifecycle Managem...
PPTX
我和阿九Azure有約 38 Azure Blob Storage 如何省錢? 搞懂Access Tier (Alan Tsai 的學習筆記)
PPTX
我和阿九Azure有約 37 Azure Blob Storage 如何檔案異動自動記錄建立檔案版本?Version Preview (Alan Tsai...
PPTX
我和阿九Azure有約 36 Azure Blob Storage 如何開啟snapshot保留目前狀態 (Alan Tsai的學習筆記)
PPTX
我和阿九Azure有約 35 Azure Blob Storage 如何開啟 Soft Delete?避免誤刪檔案 (Alan Tsai的學習筆記)
PPTX
我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...
PPTX
我和阿九Azure有約 33 Azure File Storage 什麼時候適合用Azure File? File vs Blob (Alan Tsai的...
PPTX
我和阿九Azure有約 32 Azure File Storage 介紹 (Alan Tsai的學習筆記)
PPTX
Azure Taiwan - Keep azure cost down (Azure 成本管控)
PPTX
我和阿九(Azure)有約 31 Azure Blob Storage 使用azcopy進行自動化作業 (Alan Tsai 的學習筆記)
初探 Prompt Flow 開發生成式 AI 應用的利器 | R-Ladies Taipei
從 GitHub Copilot 到 Enterprise Copilot:打造符合企業需求的智能開發助手之路 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
Microsoft Learn AI 挑戰賽-實戰三 MLOps | Alan Tsai
2021 Net Conf Taiwan-初探 Azure Communication Service 讓 App 也有視訊、通話、即時聊天、簡訊和電話功能
Visual Studio 開發密技大補帖 | Study4.TW 2021 小聚#2
我和阿九(Azure)有約 17 Azure Sql Database 基本介紹
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
架構這件事 - Azure 可以幫助什麼 - 如何選擇使用什麼 Azure 服務
我和阿九Azure有約 39 Azure Blob Storage 如何省錢? 設定 Access Tier 以及透過 Lifecycle Managem...
我和阿九Azure有約 38 Azure Blob Storage 如何省錢? 搞懂Access Tier (Alan Tsai 的學習筆記)
我和阿九Azure有約 37 Azure Blob Storage 如何檔案異動自動記錄建立檔案版本?Version Preview (Alan Tsai...
我和阿九Azure有約 36 Azure Blob Storage 如何開啟snapshot保留目前狀態 (Alan Tsai的學習筆記)
我和阿九Azure有約 35 Azure Blob Storage 如何開啟 Soft Delete?避免誤刪檔案 (Alan Tsai的學習筆記)
我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...
我和阿九Azure有約 33 Azure File Storage 什麼時候適合用Azure File? File vs Blob (Alan Tsai的...
我和阿九Azure有約 32 Azure File Storage 介紹 (Alan Tsai的學習筆記)
Azure Taiwan - Keep azure cost down (Azure 成本管控)
我和阿九(Azure)有約 31 Azure Blob Storage 使用azcopy進行自動化作業 (Alan Tsai 的學習筆記)

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