NuGet的使用、部署、搭建私有服務


前言

什麼是NuGet?

Nuget是一個.NET平臺下的開源的項目,它是Visual Studio的擴展。在使用Visual Studio開發基於.NET Framework的應用時,Nuget能把在項目中添加、移除和更新引用的工做變得更加快捷方便。git

爲何要使用NuGet

若是咱們項目開發不須要引用任何第三方庫包或者咱們本身的公共庫包,那麼使用NuGet毫無做用,可是實際狀況偏偏相反,任何項目都須要記錄日誌,最好的狀況是咱們有一個公共的日誌模塊,任何老項目或新項目咱們能夠引用它,就無需再作開發。就那咱們本身的項目來講,FC,FGOnline,FGMain,FGClient,FGServer,目前咱們沒有一個公共的日誌模塊,底層使用Kernal及其餘庫包可能也不是一個版本,即便是同一個版本咱們開發上都是將dll手工拷來拷去。在新項目上來講這增大了工做量和開發量,所以咱們須要一個庫包管理機制來管理咱們私有庫包和咱們須要使用的第三方庫包。github

NuGet的優勢

AsyncModule.NetMQ.dll舉例,AsyncModule.NetMQ.dll依賴NetMQ.dll,而NetMQ.dll又依賴AsyncIO.dll
目前咱們須要數據庫鏈接的地方咱們須要引用AsyncModule.NetMQ.dll,咱們可能會把它手工烤到咱們須要的項目中,可是因爲AsyncModule.NetMQ.dll須要依賴NetMQ.dll,所以咱們還須要手工把NetMQ.dll拷到咱們的項目中,同時因爲NetMQ.dll須要依賴AsyncIO.dll,所以咱們還須要手工把AsyncIO.dll拷到咱們的項目中。依賴這當中就會有些問題,好比咱們忘記拷了,或者咱們拷的版本不是咱們當前須要的,就會致使不少問題。
NuGet就可讓咱們避免這個問題。若咱們須要的庫包已經導入到咱們庫包服務器中,那麼咱們只須要一條語句就能夠引用該dll,同時NuGet會自動將其依賴包一塊兒引用到咱們的項目中,這徹底是自動的。web

使用

在VS中找到 Package Manager Console對話框
20171124103240-1數據庫

若界面上沒有找到,則從工具-NuGet Package Manager下找
20171124103518-2api

Get-Help NuGet

使用Get-Help NuGet命令查看幫助服務器

PM> Get-Help nuget
TOPIC
    about_NuGet
    
SHORT DESCRIPTION
    Provides information about NuGet Package Manager commands.
           
LONG DESCRIPTION
    This topic describes the NuGet Package Manager commands. NuGet is an integrated package 
    management tool for adding libraries and tools to .NET projects.

                 
    The following NuGet cmdlets are included.

        Cmdlet                  Description
        ------------------      ----------------------------------------------
        Get-Package             Gets the set of installed packages.  With -ListAvailable, 
                                gets the set of packages available from the package source.

        Install-Package         Installs a package and its dependencies into the project.

        Uninstall-Package       Uninstalls a package. If other packages depend on this package, 
                                the command will fail unless the –Force option is specified.

        Update-Package          Updates a package and its dependencies to a newer version.

        Add-BindingRedirect     Examines all assemblies within the output path for a project
                                and adds binding redirects to the application (or web) 
                                configuration file where necessary.
                            
        Get-Project             Returns a reference to the DTE (Development Tools Environment) 
                                for the specified project. If none is specifed, returns the 
                                default project selected in the Package Manager Console.

        Open-PackagePage        Open the browser pointing to ProjectUrl, LicenseUrl or 
                                ReportAbuseUrl of the specified package.

        Register-TabExpansion   Registers a tab expansion for the parameters of a command.

SEE ALSO
    Online documentation: http://go.microsoft.com/fwlink/?LinkID=206619
    Get-Package
    Install-Package
    Uninstall-Package
    Update-Package
    Add-BindingRedirect
    Get-Project
    Open-PackagePage
    Register-TabExpansion

Install-Package

使用Install-Package安裝庫包,安裝時會自動安裝當前Framework知道的庫包及依賴包,若不支持則會提示錯誤。app

PM> Install-Package AsyncModule.NetMQ
Attempting to resolve dependency 'NetMQ (≥ 4.0.0.1)'.
Attempting to resolve dependency 'AsyncIO (≥ 0.1.26)'.
Installing 'AsyncIO 0.1.26.0'.
Successfully installed 'AsyncIO 0.1.26.0'.
Installing 'NetMQ 4.0.0.1'.
Successfully installed 'NetMQ 4.0.0.1'.
Installing 'AsyncModule.NetMQ 1.1.0'.
Successfully installed 'AsyncModule.NetMQ 1.1.0'.
Adding 'AsyncIO 0.1.26.0' to NuGet.Client.
Successfully added 'AsyncIO 0.1.26.0' to NuGet.Client.
Adding 'NetMQ 4.0.0.1' to NuGet.Client.
Successfully added 'NetMQ 4.0.0.1' to NuGet.Client.
Adding 'AsyncModule.NetMQ 1.1.0' to NuGet.Client.
Successfully added 'AsyncModule.NetMQ 1.1.0' to NuGet.Client.

安裝的時候注意對應的庫包源框架

Get-Package

使用Get-Package安裝庫包less

PM> Get-Package

Id                             Version              Description/Release Notes                                                                                                                                     
--                             -------              -------------------------                                                                                                                                     
AsyncIO                        0.1.26.0             AsyncIO                                                                                                                                                       
AsyncModule.NetMQ              1.1.0                基於NetMQ的異步Socket框架                                                                                                                                            
NetMQ                          4.0.0.1              A 100% native C# port of the lightweight high performance messaging library ZeroMQ

Uninstall-Package

使用Uninstall-Package卸載已安裝的庫包,依賴包不會自動卸載,有須要則須要手工卸載依賴包

PM> Uninstall-Package AsyncModule.NetMQ
Removing 'AsyncModule.NetMQ 1.1.0' from NuGet.Client.
Successfully removed 'AsyncModule.NetMQ 1.1.0' from NuGet.Client.
Uninstalling 'AsyncModule.NetMQ 1.1.0'.
Successfully uninstalled 'AsyncModule.NetMQ 1.1.0'.

若庫包有多個版本則在庫包後面加上-Version 版本號參數安裝指定版本的庫包。若依賴包指定版本已經安裝則不會重複從新安裝。

PM> Install-Package AsyncModule.NetMQ -Version 1.1.0
Attempting to resolve dependency 'NetMQ (≥ 4.0.0.1)'.
Attempting to resolve dependency 'AsyncIO (≥ 0.1.26)'.
Installing 'AsyncModule.NetMQ 1.1.0'.
Successfully installed 'AsyncModule.NetMQ 1.1.0'.
Adding 'AsyncModule.NetMQ 1.1.0' to NuGet.Client.
Successfully added 'AsyncModule.NetMQ 1.1.0' to NuGet.Client.

固然也可使用圖形界面找到上圖中的Manager NuGet Package For Solution...打開圖形界面,在須要安裝的庫包右側點擊安裝,和輸入命令是同樣的。
20171124103850-3

界面左側列表包含已安裝庫包,在線,更新等篩選,在線裏面根據數據源分類。中間則是當前數據源庫包列表,右側則是搜索欄和選中庫包的詳細信息。

當安裝了依賴包咱們能夠在項目根目錄找到packages.config文件,會記錄咱們安裝的庫包及版本信息
20171124105559-6

同時在咱們的項目文件夾下會有個packages的文件夾用於保存咱們下載下來的庫包
20171124105740-7

製做NuGet庫包

若咱們須要上傳咱們的dll到NuGet服務器中,首先須要讓咱們VS編譯時能導出NuGet所支持的.nupkg文件
在解決方案上面右擊找到Enable NuGet Package Restore點擊開啓功能
20171124111344-8
開啓後咱們須要手動在項目的.csproj文件中在PropertyGroup下加入如下節點

<BuildPackage>true</BuildPackage>
    <RestorePackages>true</RestorePackages>

2017112411257-9
同時在Project節點內增長如下內容

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

21.png

再次編譯項目就會自動編譯出.nupkg文件。

若是是.Net Standard 項目直接在程序右鍵打包便可打包。

搭建NuGet服務器

新建一個項目
20171124115849-10
20171124115856-11
這裏使用3.0版本的NuGet.Server,須要.Net Framework 4.6支持。
而後引用NuGet.Server庫包

PM> Install-Package NuGet.Server

安裝完成後,編譯啓動便可,就是這麼簡單,而後託管到IIS上。
2017112412219-12
上傳庫包的時候可能須要apikey,須要在web.config中設置。

上傳NetGet庫包

編譯出NuGet咱們須要將包上傳到NuGet服務器中,這樣咱們才能在VS中從NuGet服務器中下載下來。這裏我使用NuGet Package Explorer工具進行上傳,官方支持Win10商店和使用Chocolatey下載。
若須要上傳到NuGet官方服務器中能夠在NuGet官網上傳,可是咱們通常須要上傳到指定NuGet服務器上,如咱們本身的NuGet服務器。
2017112412320-13
選擇第一項找到本地的.nupkg文件
2017112412435-14
2017112412514-15
左側能夠編譯一下信息,
2017112412612-16
20171124134626-17
當上傳了多個版本的dll,NuGet.Server會根據包Id和Version進行分組
20171124135034-18

在輸入命令的時候能夠用TAB鍵智能提示出當前全部版本號
2017112414219-19

咱們也可用經過命令上傳

nuget.exe push {package file} {apikey} -Source http://www.jnuget.com:10080/nuget

當咱們同一個包上傳過同一個版本的時候再次上傳會報錯,咱們須要刪除NuGet.Server已存在的包,後才能再次上傳。或者咱們能夠容許經過包同一個版本容許覆蓋上傳,將web.ConfigallowOverrideExistingPackageOnPush配置改成true便可

新增NuGet源

在Tools-Options-NuGet Package Manager-Package Sources能夠增長數據源
2017112414424-20
點擊右上角的加號新增,輸入完地址後點一下更新便可。

總結

經過此片文章講解了如何使用、部署NuGet,如何編譯生成,上傳庫包到NuGet。


本文地址:http://www.javashuo.com/article/p-ozktdxkl-kr.html 做者博客:傑哥很忙 歡迎轉載,請在明顯位置給出出處及連接

相關文章
相關標籤/搜索