.NET Core NuGet Package Offline Restore(離線還原) - 續

  • 432
  • 0

透過 NuGet.config 配置,能讓方案在離線的情況下直接建置起來,不需要在客戶環境做額外步驟就能還原 NuGet。

而上一篇文章 .NET Core NuGet Package 離線還原 需要在客戶環境下還原指令才能讓程式碼成功建置起來,比較繁鎖。但我蠻喜歡的,內容很方便寫成腳本自動化。

packages

在方案根目錄即 *.sln 同層資料夾,新增 NuGet.config 接著建置專案

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="globalPackagesFolder" value=".\packages" />
  </config>
</configuration>

建置成功後 packages 資料夾就出現了,整個方案和 packages 拿到離線環境建置也能抓到 NuGet。因為把方案的 NuGet Global Cache 改到自己的 packages 資料夾。

NuGet.config 位置及 packages 資料夾結構

.nupkg

接續上面,如果有只交付 .nupkg 形式的需要,新增文字檔儲存以下內容,將副檔名改成 .bat

if not exist save_nupkg mkdir save_nupkg

for /R .\packages %%f in (*.nupkg) do copy /Y "%%f" .\save_nupkg\

執行 .bat 檔即產出 .nupkg 在 save_nupkg。並修改 NuGet.config 配置如下

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- <config>
    <add key="globalPackagesFolder" value=".\packages" />
  </config> -->
  <packageSources>
    <add key="self" value=".\save_nupkg" />
  </packageSources>
</configuration>

略過 packages 交付整個方案和 save_nupkg 即可,因為 NuGet.config 已為方案新增了 NuGet Source,所以當 Global Cache 沒找到就會到 save_nupkg 去抓,所以這個方案到離維環境也是能直接建置。

.bat 檔及 save_nupkg 內容

結語

這次用文檔配置完成任務,因為發現抗拒下 command 的同仁不少(但配好的 .bat 檔還 OK)

如果專案剛好原本就使用了 NuGet.config,例如 Source 指向內部的 NuGet Server 等,就會修改到現有的文檔造成版控負擔,就沒那麼美了。

我可能會考慮上一篇的指令,寫成腳本來產製 packages 和 save_nupkg 資料夾。

參考

https://docs.microsoft.com/zh-tw/nuget/reference/nuget-config-file