インターネットにつながらない環境で、NuGetパッケージを参照するプロジェクトをビルドする場合。
ローカルに.nupkgファイルを用意して、パッケージソースとしてそのフォルダを参照すれば、ビルドできます。
その方法は以下参照。
インターネットに接続していないマシンでNuGetパッケージを参照する
今回は、プロジェクトをインターネットのない環境でビルドする際に、packages.configのnupkgをまとめて持ってくる方法です。
インターネットにつながる環境でNuGetで持ってくればいいんですが、手元にVisual Studioが入っている環境がなかったので、代わりの方法で。
nuget.exeを使う
nugetのCUI版がここにあります。
ページトップの表にある、nuget.exeのDownload列のリンクから。
スタンドアロンのexeがダウンロードできるので、適当な場所に置き、ソリューションファイルに以下のコマンドを実行する。packagesフォルダがVisual Studioで復元したときと同じように作成されました。
nuget restore <ソリューションファイル>
nuget.exeもVisual Studioも使わない方法
まず、nupkgをダウンロードする際のリンクは以下の形式です。
https://www.nuget.org/api/v2/package/Moq/4.8.3
形式を見ると「https://www.nuget.org/api/v2/package/<パッケージ名>/<バージョン>」。
packages.configを見ると、
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Antlr" version="3.4.1.9004" targetFramework="net462" /> <package id="bootstrap" version="4.1.1" targetFramework="net462" /> <package id="Doxygen" version="1.8.13" targetFramework="net462" /> <package id="jQuery" version="3.0.0" targetFramework="net462" /> <package id="Microsoft.ApplicationInsights" version="2.2.0" targetFramework="net462" /> ...
各行にパッケージ名とバージョン番号があるので、正規表現で、PowerShell(なんでもいいですが)ダウンロードコマンドに変換してしまいます。
テストはサクラエディタでしました。他にもいくつか属性がつくようなので、必要に応じて適宜変更してください。
正規表現例
置換前: <package id=”([^”]*)” version=”([^”]*)” .*/>
置換後:Invoke-WebRequest -Uri https://www.nuget.org/api/v2/package/\1/\2 -OutFile \1\2.nupkg
PowerShellのInvoke-WebRequestを使っているので、バージョン3以上が必要。
このまま使う場合は、保存先のパスで実行してください。
nupkgが取れたらまとめて開発マシンのローカルパッケージソースにコピーした上で、復元すればビルドできます。