tekitoumemo’s diary

C#、ASP.NET MVC、その他の言語やらツールのブログを書いています。たまに車や雑談するときがあります。

【.NET】jenkinsでnugetパッケージを復元してMSBuildする


技術ネタ。久しぶりすぎる。調べたことを書きためようと思い掘り出してたら一年前の技術ネタが出てきたから書いていく!

jenkinsでMSBuildするとnugetが復元出来ない。VisualStudioでは出来てたのにーウキーってなったけど、まぁ普通にMSBuildとnuget関係ないし当たり前だよねって話。

その前にMSBuildとdevenvの説明を簡単にする。

MSBuild

Microsoftのビルドツール。標準で入ってる。え?説明簡単すぎ?

devenv

IDEを操作するツール。要はVisualStudioを操作出来るよ!ってやつ。VisualStudioのビルドはこれを使って実行される(厳密にはMSBuildだけど)

話を戻して、jenkinsではMSBuildビルドのプラグインしかないので、コマンドラインからdevenv使ったらいけんじゃね?と思って試した。
devenvの実行方法は以下。

cd {devenv.exeのパス}※PATH通してもOK
Devenv "対象のsln" /Rebuild debug /out {ログのパス}

結果、nuget取れない。
VisualStudioいろいろやってんのかよ!なんだよ!優秀だなーと思いながら他の方法を試す。

nugetCLIってのがあった。

まずはプロジェクトにnugetCLIを設定する。

下のリンクわかりやすいね。
http://dany1468.hatenablog.com/entry/2013/04/21/114228

次にnugetCLIでパッケージを復元する

cd {package.configが入っているディレクトリ}
{nuget.exeのパス} restore -SolutionDirectory {対象のslnが入っているディレクトリ}

これで問題ないが、カレントディレクトリに複数ソリューションがあった場合、エラーとなるのでその場合は以下のコマンドを入力する。

{nuget.exeのパス}  install {packages.configのパス} -OutputDirectory packages

復元するパッケージはpackage.cofigに書かないと取ってこれない。書き方は以下(自動生成されるけど手動でもおっけぃ)ちなみに複数バージョンは入れられません。

 <?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="AjaxControlToolkit" version="4.1.60623" targetFramework="net452" />
</packages>

MSBuildでビルド

MSBuild {ビルドするソリューション}

オプションは調べてね。

jenkinsに設定

http://cointoss.hatenablog.com/entry/20111213/1323702126
http://mk3008net.hatenablog.com/entry/2015/03/29/124511
実際、上記の記事見たわけじゃないから参考になるかわからない。

packageはweb.configとの兼ね合いでアセンブリエラーになったりするので、可能な限り自動でインストールした方がいいと思います。