您已经构建了一个应用程序或者一组重要的脚本,并且需要打包并部署它。不需要再找了,NuGet和各种可用的NuGet软件包管理器就是您需要的。
在本文中,您将学习如何首次设置各种NuGet软件包管理器,以便立即开始使用它们。
相关文章: 在Windows上设置NuGet服务器(完整步骤)
设置NuGet.Server包装器
虽然从头开始设置NuGet.Server不太复杂,但对于新手来说,可能需要一些时间来熟悉Visual Studio和IIS。加快设置和更新过程的方法是使用一个包装器。其中最受欢迎的包装器之一是由svenkle编写的nuget-server,可以在他们的Github页面找到。
使用这个包装器与手动安装Web服务器的主要区别之一是它使用IIS Express。您可以在Microsoft的网站上阅读更多关于这些差异的信息。
设置纯净的NuGet.Server和使用这个包装器之间有两个重要的区别:
- 您必须创建一个Windows服务来启动Web服务器
- 您不能使用IIS Manager进行配置。
使用包装器安装NuGet.Server的主要缺点是,除非更新了包装器,否则无法轻松更新版本。
先决条件
如果您想了解如何设置NuGet.Server包装器,首先需要确保您具备以下内容:
- svenkle的NuGet.Server包装器安装程序
- Windows Server – 任何当前支持的Windows Server版本都可以,但所有截图都基于Windows Server 2019 Standard
安装Web服务器服务
第一步是创建一个新的Windows服务。由于此NuGet.Server包装器不使用IIS,因此无法依赖于IIS。
使用从发布页面下载的NuGetServer.zip文件,将文件解压到Web服务器上的目录中。解压后,创建Windows服务以在启动服务器时自动启动网页。下面是一个用于执行此操作的PowerShell命令。
自定义Web服务器
現在您已經從包裝程式安裝了NuGet.Server並創建並啟動了服務,現在是時候自定義web.config檔案了。您可以對web.config檔案進行相同的更改,就像手動部署時一樣。
該web.config檔案位於<UnzipPath>\Host\Website資料夾中。此部署的主要區別是它使用8080端口,而不是默認的HTTP端口80。這意味著您在任何需要使用網址的地方都必須添加:8080,例如當您訪問網頁時,網址應為http://localhost:8080/nuget。
完成了。這比使用Visual Studio要容易得多!
在IIS上設置BaGet
雖然到目前為止,您只看到了NuGet.Server的原始版本,但還有很多其他可用的版本。一個流行的NuGet套件管理器是一個名為BaGet的開源項目。
讓我們看看如何在搭載IIS的Windows Server上安裝和運行BaGet。
先決條件
在開始之前,請確保您滿足一些先決條件。
- BaGet.zip – 在撰寫本文時,該項目仍處於預發行版本,我使用的是v0.1.77
- .NET Core Runtime & Hosting Bundle – 需要下載並在網頁伺服器上可用。
- Windows Server – 任何目前支援的 Windows Server 版本都可以,但所有的截圖都是在 Windows Server 2019 Standard 上拍攝的
安裝網頁伺服器前置條件
雖然以下步驟可以在具備 .NET Core 的 Linux 或 Docker 映像上執行,但這些指示將用於在 Windows 伺服器上安裝 BaGet。這樣您就可以利用 IIS 來啟動和停止伺服器。
安裝 IIS
由於 BaGet 在 .NET Core 上執行,所以不像您之前為 NuGet.Server 安裝 IIS 那樣有很多要求。您只需要一個預設的 IIS 網頁伺服器和 IIS 管理員。要安裝這些,請在網頁伺服器上打開 PowerShell 會話並執行:
安裝 .NET Core
接下來,在網頁伺服器上安裝 .NET Core 套件組。要執行此操作,請運行先前下載的 exe 檔案。您可以保留此安裝的所有選項為預設。
必須在安裝 IIS 之後安裝 .NET Core 套件組。如果未按照正確的順序進行安裝,您將需要重新執行 .NET Core 套件組的安裝程式,並選擇修復以添加網頁應用程式所需的遺漏條件。
現在您已經準備好網頁伺服器元件,將之前下載的 BaGet.zip 檔案解壓縮並放置在網頁伺服器上的 C:\inetpub\wwwroot 資料夾中。
設定網頁伺服器應用程式
與NuGet.Server相似,您需要設置幾個IIS組件才能運行NuGet包管理器BaGet。
創建BaGet IIS應用程序池
在Web服務器上打開IIS管理器並轉到應用程序池。為BaGet創建一個新的應用程序池,因為它不會使用.NET托管代碼。您可以根據需要命名。以下是應該如何配置的方式。

創建BaGet網站
創建應用程序池後,創建網站。由於BeGet使用非標準的HTTP端口和非默認的應用程序池,最好從默認網站創建一個獨立的網站。要做到這一點,在IIS管理器中右鍵單擊Sites文件夾,然後選擇添加網站。
以下是您需要配置BaGet的設置。

配置網站後,它應該會自動啟動。您可以通過從服務器上的http://localhost:5000/ 訪問它來查看它。

您會注意到與標准的NuGet.Server網頁相比,BaGet網頁上有更多的用戶界面。在BaGet中,您可以輕松搜索已上傳的包,並且還提供了各種方式上傳的命令,而不是使用NuGet命令行選項。
自定義BaGet Web服務器
請記住,您可以使用web.config文件自定義NuGet.Server服務器。但是,NuGet包管理器BaGet不使用web.config文件。相反,由於BaGet也可以在Linux上使用,開發人員選擇了一種更跨平台的格式,使用名為appsettings.json的JSON文件。它位於C:\inetpub\wwwroot\BaGet文件夾中。
請注意,由於BaGet使用.NET Core進行跨平台功能,所有路徑都使用正斜杠。
例如,如果您想在服務器上將包路徑設置為C:\Packages,則需要在appsettings.json文件中添加以下內容。
BaGet API金鑰
為了保護您的NuGet服務器免受未經授權的用戶發布或刪除包的操作,您仍然需要設置API金鑰。API金鑰設置也位於appsettings.json文件中,因此您可以在進行其他設置時同時設置API金鑰。
由於我使用PowerShell來管理我的NuGet包,我可以再次註冊一個PSRepository。對於BaGet,請訪問您創建的網頁。該網頁將向您提供在PowerShell會話中運行的命令。例如:
了解BaGet的分支(LiGet)
雖然BaGet提供了許多選項供使用,但還有其他基於BaGet的分支,專注於NuGet的其他領域。其中最受歡迎的分支之一是LiGet。LiGet的不同之處在於它專注於以Linux為首的觀點。
LiGet 是 BaGet 的原始專案的一個 NuGet 套件管理器分叉。開發人員之所以這樣做有幾個原因,但主要是為了專注於 NuGet 的一些特定功能,包括 v3 feed 的支援。V3 feed 的支援不會影響 PowerShell 的使用情境。但如果您要為其他使用情境托管 NuGet 伺服器,您可能會喜歡增加的功能。
LiGet 的 Hashed API Key
LiGet 與 BaGet 的一個主要區別是使用了哈希 API 金鑰而不是明文。如果某人可以存取 NuGet.Server 上的 web.config 檔案或 BaGet 上的 appsettings.json,他們就可以將其發布到伺服器上。這在 LiGet 中是不可能的。
要啟動並運行 LiGet,您需要創建一個哈希 API 金鑰並將其放入 appsettings.json 檔案中的 C:\inetpub\wwwroot\LiGet 資料夾中。
要創建哈希,您可以使用 PowerShell 或其他您熟悉的哈希方法。以下是在您的工作站上運行的示例。
您也可以使用 線上哈希生成器 來創建哈希。
這種方法的缺點是如果您忘記了 API 金鑰,您必須創建一個新的哈希並替換它,因為哈希是不可逆的。
在 IIS 上設置 ProGet
到目前为止,所涵盖的所有选项都是免费的,并且一旦设置好了,就没有太多的移动部件。虽然这对于尝试 NuGet 是不错的选择,但如果您想与其他工具集成,或者如果您需要厂商对工作场所的系统提供支持,那么更好的选择可能是 NuGet 包管理器 ProGet。
先决条件
要设置 ProGet,您将需要一些常见的先决条件,您可能已经习惯了,但还需要额外的可选 SQL 数据库。
- Windows Server – 任何当前支持的 Windows Server 版本都可以使用,但是所有的屏幕截图都是在 Windows Server 2019 Standard 上进行的。
- ProGet 安装程序 – 我使用的 ProGet 版本是 5.2.9。
- SQL 实例 – 这是可选的,因为 ProGet 有一个选项可以从安装程序中安装 SQL Express,尽管这需要您的服务器与互联网连接才能进行初始下载。
安装 ProGet
从您的 Web 服务器上运行 ProGet 安装程序。由于您正在设置 IIS,请在安装 ProGet 时选择 IIS Web 服务器 选项。如果您尚未安装 IIS,它将在 ProGet 安装期间进行安装。
其余的选项可以保留默认值,除非您想将ProGet数据库托管在单独的SQL服务器上。在这种情况下,您需要指定要使用的SQL实例。
如果将SQL Server选项保留为安装Inedo实例,它将为您安装SQL Express服务器。

安装完成后,按提示启动网站,您应该会看到一个页面,看起来像下面的截图一样。

在ProGet上配置PSRepository
此时,ProGet已安装。这很容易。由于我们使用PowerShell来处理NuGet包,我们需要设置一个PSRepository,就像我们以前做的那样。
要为PSRepository设置ProGet,请导航到Feeds选项卡并创建一个新的Feed。您可以随意命名该Feed。然后选择Third-party package format和PowerShell,如下所示。

创建Feed后,返回到Feeds选项卡,选择您的新Feed,它将显示用于发布的URL。这是您需要在设备上在PowerShell中运行以发布或下载此PSRepository的内容。
以下是上述示例中显示的内容:
添加API密钥
和其他选项一样,您需要生成一个API密钥。要执行此操作,单击右上角的齿轮图标,然后从左侧工具栏中选择API Keys。在这里,您可以查看现有的API密钥并创建新的API密钥。您将立即看到开源和企业版ProGet之间的一个主要区别。使用ProGet,您可以拥有许多API密钥。

在API密鑰頁面上,點擊創建API密鑰。從這裡選中Feed API的框,然後點擊保存API密鑰。

創建API密鑰後,將返回API密鑰頁面。從這裡,您可以使用所見的API密鑰來發布包到您的Feed中。
使用ProGet搜索包
ProGet還包括一個網頁,允許您搜索Feed中的所有NuGet包,查看其下載次數、PowerShell模塊的名稱,包被上傳到的Feed以及其他類似的包統計信息,如下所示的包頁面。

或者,您可以轉到Feeds頁面,選擇一個Feed,只查看該Feed的包。在那裡,您可以進一步查看個別包的統計信息和其他詳細信息,如下所示。

更新ProGet
使用一個定位于企業的產品的好處之一是,一些耗時的管理任務更快速。ProGet的更新就是一個例子。
要將ProGet更新為最新版本,只需在Web服務器上打開Inedo安裝程序。這是在您第一次安裝ProGet時安裝的。點擊下面顯示的升級按鈕,安裝程序就會為您完成其餘的工作。

NuGet包管理器比較
在本文中,您已經了解了許多不同的NuGet工具。如果您還在尋找要嘗試的工具,本節將讓您一窺每個工具的不同之處。
BaGet vs. LiGet
由於LiGet是BaGet的分支,它們有許多相似之處,包括大部分的設置過程。實際上,您可以按照與BaGet完全相同的設置程序進行操作。
安裝完成後,LiGet和BaGet確實共享一些功能,但在其他方面存在差異。
Feature | BaGet | LiGet |
---|---|---|
Web Port | 5000 | 9011 |
Source URL | /v3/index.json | /api/v3/index.json |
NuGet Search API | v2 | v3 |
API Key | Plain Text | SHA256 hash |
Web Interface | Can see list of packages and commands to upload | No web interface |
儘管這些差異大多不會影響使用PowerShell,但由於使用了哈希API密鑰,設置稍有變化。
BaGet和LiGet都是基於.NET Core構建的,這使它們可以在Linux操作系統以及Windows上使用。兩者都有Docker映像可用,如果您已經在使用容器服務,則可以使設置更快且更便攜。
由於LiGet和BaGet之間的少量差異,無論哪個選擇都是一個很好的選擇,作為一個開源的、容器友好的NuGet服務器。這兩個選項都允許您在Windows上體驗NuGet服務器,同時又可以在不太多的額外工作下將來遷移到Linux或Docker映像。
BaGet vs ProGet
如果您不想自己進行某種程度的自定義並選擇簡單的方法,那麼總是可以選擇ProGet。儘管存在一些缺點,ProGet並不是開源的,也不是免費的。但是,它更容易設置和使用。
ProGet和BaGet之間存在一些重大差異。
Feature | ProGet | BaGet |
---|---|---|
Cost | ProGet Free: Free, ProGet Basic: $1995/yr, ProGet Enterprise: $9995+/year | Free |
Platform | Windows | Windows, Linux, Docker |
Database | SQL | Internal |
Support | ProGet Free: Email and Slack support, ProGet Basic and Enterprise: Defined SLAs with Email, Slack and Phone support | Community based through GitHub issues |
Inedo還對ProGet的各個版本之間的功能差異進行了詳細說明。
總結
在本文中,你學到了很多關於各種 NuGet 工具和技術的知識。如果你對於要使用哪個 NuGet 服務器還有疑慮,現在你應該有更多的知識來幫助你做出決定。
你學到了如何設置每個 NuGet 工具以便在 Windows 上使用,我們也介紹了每個工具的許多功能。