Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,311 views

Published on

demo repo - https://github.com/alantsai-samples/Nuget-Package-Create-Sample
身為開發者,一定有很多小工具或一些小方法是多個專案可以使用到。
目前如何把這些功能代入不同專案呢?不會是邪惡的copy and paste吧?如果是,相信到目前應該遇到很多版本同步問題。

何不把這些建立成為一個自己的nuget package?再也不會有這些同步問題。

Published in: Technology

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

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

×