.NET Core 系列5 :使用 Nuget打包類庫

来源:http://www.cnblogs.com/shanyou/archive/2016/08/29/5814683.html
-Advertisement-
Play Games

以往做nuget包我們一般要麼用命令行,要麼用nuget的圖形化界面去做,但是一些操作比較麻煩.比如引入命名空間,引入第三方nuget包。這些在.NET Core項目里卻很簡單,只需要使用命令行dotnet pack,在.NET Core系列 : 1、.NET Core 環境搭建和命令行CLI入門 ...


NuGet是個開源項目,項目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等項目,.NET Core項目完全使用Nuget 管理組件之間的依賴關係,Nuget已經成為.NET 生態系統中不可或缺的一個組件,從項目角度,將項目中各種組件的引用統統交給NuGet,添加組件/刪除組件/以及更新組件即可一鍵完成,大大提升工作效率,減少不必要的引用報錯。從運維角度,可在不影響老版本的情況下發佈新版本,可統一管理公司各個項目中組件版本不一和各個版本組件的使用情況,減少故障發生以並使得項目穩定運行。

以往做nuget包我們一般要麼用命令行,要麼用nuget的圖形化界面去做,但是一些操作比較麻煩.比如引入命名空間,引入第三方nuget包。這些在.NET Core項目里卻很簡單,只需要使用命令行dotnet pack,在.NET Core系列 : 1、.NET Core 環境搭建和命令行CLI入門 做了簡要介紹,下麵我們來詳細介紹下這個命令。

dotnet-pack - 將代碼打包成 NuGet 包

概要

dotnet pack [--output] [--no-build] [--build-base-path] [--configuration] [--version-suffix] [<project>]

描述

dotnet pack 命令生成項目並創建 NuGet 包。這個操作的結果是兩個 nupkg 擴展名的包。一個包含代碼,另一個包含調試符號。

該項目被依賴的 NuGet 包裝被添加到 nuspec 文件,因此,他們能夠在安裝包時得到解決。
預設情況下,項目到項目之間的引用是不打包到項目中的。如果你想那樣做,你需要在你的依賴中引用需要項目的 type 節點設置為 “build” ,設置就像下麵的例子:

{
    "version": "1.0.0-*",
    "dependencies": {
        "ProjectA": {
            "target": "project",
            "type": "build"
        }
    }
}

預設情況下,dotnet pack 首先生成項目。如果你想避免這樣,傳遞 --no-build 選項。這在持續集成(CI)構建場景,正如你所知道代碼僅僅是預生成的示例,是很有用的。

選項

[project]

打包的項目。它還可以是一個 project.json 文件的路徑或者是目錄。如果忽略,它將預設為當前目錄。

-o, --output [DIR]

指定生成的目錄。

--no-build

打包進程中跳過生成階段。

--build-base-path

指定臨時生成產物的目錄。預設情況下,它們在當前目錄的 obj 目錄。

-c, --configuration [Debug|Release]

當生成項目時使用的配置。如果沒有指定,將預設為 “Debug”。

例子

dotnet pack

打包當前項目。

dotnet pack ~/projects/app1/project.json

打包 app1 項目。

dotnet pack --output nupkgs

打包當前的應用程式,並將生成的包放置到指定的文件夾中。

dotnet pack --no-build --output nupkgs

打包當前的項目到指定的文件夾中,並跳過生成步驟

 

回到我們在.NET Core系列 :3 、使用多個項目 創建的類庫項目DotnetNewLib,切換到DotnetNewLib 目錄下執行 dotnet pack命令:

[root@Mono DotnetNewLib]# dotnet pack
Project DotnetNewLib (.NETStandard,Version=v1.6) was previously compiled. Skipping compilation.
Producing nuget package "DotnetNewLib.1.0.0" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Debug/DotnetNewLib.1.0.0.nupkg
Producing nuget package "DotnetNewLib.1.0.0.symbols" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Debug/DotnetNewLib.1.0.0.symbols.nupkg

 

目錄結構如下:

DotnetNewLib

|-- Library.cs

|-- project.json

|-- project.lock.json

+—bin

     +—Debug

              |-- DotnetNewLib.1.0.0.nupkg

              |-- DotnetNewLib.1.0.0.symbols.nupkg

              +-- netstandard1.6

                          |-- DotnetNewLib.deps.json

                          |-- DotnetNewLib.dll

                          +-- DotnetNewLib.pdb

 

上面的結構里我把obj目錄拿掉了,我們看到在Debug目錄下生成了2個文件DotnetNewLib.1.0.0.nupkg 和DotnetNewLib.1.0.0.symbols.nupkg, 這些就是nuget 包,很簡單吧,版本號信息來自於project.json文件:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable"
  },
  "dependencies": {},
  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  }
}

但是我生成的是Debug,我們生成Release 版本:

dotnet pack -c Release

[root@Mono DotnetNewLib]# dotnet pack -c Release
Project DotnetNewLib (.NETStandard,Version=v1.6) will be compiled because expected outputs are missing
Compiling DotnetNewLib for .NETStandard,Version=v1.6

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:03.4976986


Producing nuget package "DotnetNewLib.1.0.0" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Release/DotnetNewLib.1.0.0.nupkg
Producing nuget package "DotnetNewLib.1.0.0.symbols" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Release/DotnetNewLib.1.0.0.symbols.nupkg

生成了Release目錄

DotnetNewLib

|-- Library.cs

|-- project.json

|-- project.lock.json

+—bin

     +—Debug

              |-- DotnetNewLib.1.0.0.nupkg

              |-- DotnetNewLib.1.0.0.symbols.nupkg

              +-- netstandard1.6

                          |-- DotnetNewLib.deps.json

                          |-- DotnetNewLib.dll

                          +-- DotnetNewLib.pdb

     +—Release

              |-- DotnetNewLib.1.0.0.nupkg

              |-- DotnetNewLib.1.0.0.symbols.nupkg

              +-- netstandard1.6

                          |-- DotnetNewLib.deps.json

                          |-- DotnetNewLib.dll

                          +-- DotnetNewLib.pdb

在Release目錄下 生成了2個文件DotnetNewLib.1.0.0.nupkg 和DotnetNewLib.1.0.0.symbols.nupkg,第一個文件就是我們想要的nuget包。我們來看下Nuget 包里的具體內容,我們可以用

 NuGet Package Explorer 工具打開DotnetNewLib.1.0.0.nupkg:

image

裡面僅有一個 lib 文件 netstandard1.6 目標配置文件。這意味著,我們 NuGet 包只適用於.Net Core 應用程式 針對 NetStandard1.6 (和即將到來的 4.6.3),文章 擁抱.NET Core,如何開發一個跨平臺類庫 (1)

對Nuget包做了很好的說明瞭,推薦大家閱讀, 園子里還有一篇《用命令行工具創建 NuGet 程式包》對Nuget 的詳細內容做了講解。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 彙編器構造 一、 彙編器簡介 前面介紹了編譯器構造和靜態鏈接器構造的具體方法,而且我們實現了一個將高級語言轉化為彙編語言的編譯器,同時又實現了一個將多個目標文件鏈接為一個可執行文件的鏈接器。現在需要一個連接這兩個模塊的功能模塊——彙編器,它能將一個單獨的彙編文件轉換為一個可重定位目標文件,如圖1-1 ...
  • file命令及其用法 file:查看文件內容 的類型 du命令及其用法 -s: -h: read命令及其用法 描述GPL,BSD,Apache三個開源協定的大體聯繫及區別 自由軟體 開源協定,版權描述 列出Linux的發行版,並說明其跟Linux內核的關係 Linux,GNU:GNU/Linux, ...
  • UDP和TCP處於同一層網路模型中,也就是運輸層,基於二者之上的應用有很多,常見的基於TCP的有HTTP、Telnet等,基於UDP有DNS、NFS、SNMP等。UDP是無連接,不可靠的數據協議服務,而TCP提供面向流、提供可靠數據服務。註意,UDP和TCP沒有好壞之分,只是二者的適用場景不同罷了。 ...
  • ...
  • Linux 內核學習筆記整理。 Unix unix 已有40歷史,但電腦科學家仍認為其是現存操作系統中最大和最優秀的系統,它已成為一種傳奇的存在,歷經時間的考驗卻依然聲名不墜。 1973 年,在用 C 語言重寫了 Unix 系統後,大量的Unix衍生版本開始出現,許多公司把 unix 移植到新的機 ...
  • 近期上了Redmine以後,系統集成了Git的聯動功能,於是萌生了搭建內網倉庫的想法,特此記錄一下: 1.安裝Git 2.創建用戶及密碼 3.創建倉庫 首先切換用戶到git 創建倉庫目錄並初始化 4.配置公鑰 打開git的RSA認證 開啟以下內容 保存退出,然後複製要添加的公鑰,到git主目錄下麵創 ...
  • 目錄: 1. 樹莓派Odroid等卡片式電腦上搭建NAS教程系列1-Ubuntu系統安裝 2. 樹莓派Odroid等卡片式電腦上搭建NAS教程系列2-SSH連接訪問 3. 樹莓派Odroid等卡片式電腦上搭建NAS教程系列3-掛載HDD硬碟+節電設置 4. 樹莓派Odroid等卡片式電腦上搭建NAS ...
  • 原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章、作者信息和本聲明。否則將追究法律責任。 最近使用busybox為基於ARM的板卡定製了一個極簡單的根文件系統,由於busybox僅支持telnet而不支持ssh,本文將詳細描述如何交叉編譯dropbear並將其移植到目標板卡上使能dropbear ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...