2020年4月8日 星期三

在 Visual Studio 內,指定特定的 NuGet 套件安裝來源作法

在 Visual Studio 內,指定特定的 NuGet 套件安裝來源作法

當在進行專案開發的時候,可以將團隊需要用到的各種常用 API,設計到類別庫內,接著,可以將該類別庫打包成為一個 NuGet 套件,而該 NuGet 套件便可以散發到網路上,提供其他開發團隊的成員,在 Visual Studio 內來設定該 NuGet 套件來源,取得所需要的套件。通常,開發者會打開他們的 Visual Studio,點選功能表 [工具] > [選項] > [NuGet 套件管理員] > [套件來源]
NuGet 可用套件來源
當看到 [可用套件來源] 對話窗出現之後,便可以在這個對話窗中,輸入想要新增的額外 NuGet 來源與名稱,這些 NuGet 的來源可能是公司內部的某個檔案伺服器的路徑、公司內部的私有 NuGet 伺服器、外部其他廠商提供的私有 NuGet 伺服器。
在這篇文章中,我已經將一些授課或者寫書會用到的常用 API,設計成為一個 類別庫,並且打包成為 NuGet 檔案,最後,上傳到 https://www.myget.org/ 網站上;當對於這些 API 有興趣者,只要輸入這個 URL https://www.myget.org/F/course-lab/api/v3/index.json 到 NuGet 來源設定中,便可以取得這些套件。
不過,問題來了,若在某台電腦上的 Visual Studio 已經設定了這個 NuGet 來源,對於使用其他電腦的開發者,一旦打開了這個正在開發的專案,則會因為那台電腦上沒有設定相關 NuGet 來源,而造成無法順利建置該專案;又或者是你自己的電腦重新安裝作業系統或者換了一台新電腦,也會遇到需要重新進行設定的困境。
現在可以使用 [nuget.config] 設個檔案,定義該專案要使用的其他 NuGet 來源,一旦設定好了之後,這些 NuGet 來源,便會跟著該專案跑,也就是說,當這個專案在別台電腦上打開之後,在這台電腦上,就已經會看到這些額外設定的 NuGet 來源。
這個說明專案的原始碼為 CustomNuGetSource

建立練習專案

  • 在這裡將會建立一個 Console 類型的專案來做為說明
  • 當該專案建立之後,請在該方案總管的節點上,使用滑鼠右擊 [加入] > [新增資料夾]
  • 對於該新的方案資料夾,輸入 nuget
  • 完成之後,滑鼠右擊 [nuget] 這個資料夾,選擇 [加入] > [新增項目]
  • 當新增項目對話窗顯示之後,在 [一般] 標籤頁次內的中間區域,會看到 [XML檔] 這個選項
  • 請點選 [XML 檔]這個選項,在下方的名稱欄位中,輸入 : nuget.config
  • 最後,請將底下內容,填入到這個檔案內
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="course-lab" value="https://www.myget.org/F/course-lab/api/v3/index.json" />
  </packageSources>
</configuration>

檢查 NuGet 來源是否已經綁定專案了

  • 請先關閉 Visual Studio ,並且重新開啟 Visual Studio
  • 滑鼠右擊該專案的 [參考] 節點,選擇 [管理 NuGet 套件]
  • 當管理NuGet套件視窗出現之後,可以點選該視窗右上方的 [套件來源] 下拉選單
  • 此時,將會看到一個新的 NuGet 套件來源選項,這就是剛剛設定的 NuGet 套件來源,而該套件來源,將會跟著該專案跑。
    NuGet 套件
  • 另外,點選 Visual Studio 功能表 [工具] > [選項]
  • 當選項對話窗出現之後,展開 [NuGet 套件管理員] > [套件來源],也會看到這個新增的套件來源項目
    Visual Studio 可用套件來源

設計測試專案原始碼

在 [Program.cs] 檔案中,使用底下程式碼替代
    class Program
    {
        static void Main(string[] args)
        {
            var foo = Vulcan.ServiceSample.MonkeyData.Monkeys;
            foreach (var item in foo)
            {
                Console.WriteLine($"{item.Name}");
            }


            Console.WriteLine("Press any key for continuing...");
            Console.ReadKey();
        }
    }



沒有留言:

張貼留言