透過 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 資料夾。
.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 去抓,所以這個方案到離維環境也是能直接建置。
結語
這次用文檔配置完成任務,因為發現抗拒下 command 的同仁不少(但配好的 .bat 檔還 OK)
如果專案剛好原本就使用了 NuGet.config,例如 Source 指向內部的 NuGet Server 等,就會修改到現有的文檔造成版控負擔,就沒那麼美了。
我可能會考慮上一篇的指令,寫成腳本來產製 packages 和 save_nupkg 資料夾。
參考
https://docs.microsoft.com/zh-tw/nuget/reference/nuget-config-file