packages.configにある.nupkgファイルをまとめてダウンロード

インターネットにつながらない環境で、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が取れたらまとめて開発マシンのローカルパッケージソースにコピーした上で、復元すればビルドできます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする