NuGet-アセンブリプロセス中にインターネットからパッケージをダウンロードする

UPD:ここで使用されているのと同様のメソッドがNuGet 1.6に含まれています。 したがって、この記事は古くなっています。

Javaについて私がいつも気に入っているものの1つはMavenです。 必要なすべてのリストを含む1つのファイル。リポジトリにはバイナリはありません。 NuPackが登場したとき、私は決めました-ほら、ここにあります、幸福が私たちの街に来ました。 しかし、そこにはありませんでした。 NuPackは、パッケージを操作するための便利なインターフェイスを提供しましたが、通常はビルドプロセスに組み込むことができませんでした。

私はそれをつついて見ましたが、本当の利点は見られませんでした。 手動のpowershellコマンドを使用して名前でパッケージをダウンロードしても、多くの助けにはなりません。 ええ、はい、どこからFIGをダウンロードし、手で参照を追加するよりも便利ですが、毎日必要ではありません。 一般的に、ゲームはろうそくの価値はありません。

しかし、ある日、アクセスコントロールのShared \ Binフォルダーで何かを行う必要があることに気付きました。 すでにNuGetと呼ばれていたNuPackで何かが変わったかどうかを調べることにしました。 いいえ、 カートなどがあります。

しかし、nuget.exeには興味深い機能があります...
ファイル "packages.config"をパラメーターとして渡すと、NuGetはこのプロジェクトにインストールされているパッケージのリストを保存し、指定されたすべてのパッケージをダウンロードします。

技術の問題

1)プロジェクトに含めるNuGet.Targetsを作成します。
<? xml version ="1.0" ? >
< Project xmlns ="http://schemas.microsoft.com/developer/msbuild/2003" >
< PropertyGroup >
< BuildDependsOn >
_InsallNuGetPackages;$(BuildDependsOn)
</ BuildDependsOn >
</ PropertyGroup >

< Target Name ="_InsallNuGetPackages" >
< Exec Command ="$(MSBuildThisFileDirectory)\NuGet install $(ProjectDir)packages.config -o $(SolutionDir)Packages" />
</ Target >
</ Project >


* This source code was highlighted with Source Code Highlighter .

ソートコントロールに配置し、各ビルドの前にNuGetを実行します。 NuGetの配置に関して:ターゲットの隣のコントロールにexe-boxを置くことができ、単にそれをパスに追加することができます。 私にとっては、コーシャは少なくなりますが、最初のオプションはより便利です。 すべての従業員に強制的にNuget.exeをパスに配置する場合は、 $(MSBuildThisFileDirectory)削除するだけです。
...ビルドサーバーを忘れないでください;)

2)パッケージをNuGetプロジェクトに追加します。
3)*に手を追加します。*プロジェクトファイル:
< Import Project ="$(SolutionDir)\\\\\NuGet.Targets" />

* This source code was highlighted with Source Code Highlighter .

実際には、ビルド時にすべてのパッケージが自動的に取り出されます。 そして、彼らがまだそこにいない場合にのみ-これは良いことです。

もしも...

...私のプロジェクトはnuget.orgにないバイナリを使用していますか? 問題ありません。 フィードを作成します。 MyGetを使用できますが、私の意見では、サーバー上での作成はさらに簡単です。
1)新しい空のWebアプリケーションプロジェクトを作成する
2)NuGet.Serverパッケージを配置します
3)公開。

すべて準備完了です。 ガベージが発行されるので、少しクリーンアップできます...さて、いつものように。 公開されたプロジェクトには、実際にパッケージを配置するパッケージフォルダーがあります。

クッキングガーニッシュパッケージ。

これも簡単です。 nuget.exeが役立ちます。
順番に:
1) nuget spec . 、パッケージマニフェストテンプレートを含むnuget spec .ファイルを生成します。 私たちは修正します、それは簡単です、あなたは自分でそれを理解します:)
2)nuspecを空のパパに入れ、その隣にlibを作成し、dllを入れます。
パッケージファイルを生成するnuget pack ..nuspec実行します。
3)受信したパッケージをサーバーの上記のPackageフォルダーに注ぎます。

daddy libについて:見つかったファイルは、インポートプロジェクトの参照に追加されます。 そしてそのように。 これはドキュメントに明確に記載されていなかったため、実験する必要がありました。

仕上げ

そのため、パッケージが用意されたサーバーがあり、それをスタジオに固定してプロセスを構築する必要があります。 スタジオで-再び、問題ありません:
[ツール]-> [ライブラリパッケージマネージャー]-> [パッケージマネージャー設定]、[パッケージソース]を選択し、独自のソースを追加します。 しかし、実際に私は何ですか-あなたがすでにこの場所に読んだことがあるなら、あなたはそれを理解します。
ビルドプロセス:正直に言うと、NuGetがパッケージファイルからパッケージパスを保存することを望んでいました。 しかし、いや、彼はそのような些細なことにはなりません。 nuget.exeのパラメーターを追加する必要があります...別のファイルで実行したことを覚えていますか? 1行に多くの名誉を与えますよね? いいえ、そうではありません。 今では私たちにとって便利です(30の別々のプロジェクトに登らないと便利になったため)。 行をexecから次の行に変更します。
< Exec Command ="NuGet install $(ProjectDir)packages.config -o $(SolutionDir)Packages -Source nuget.example.com/nuget -Source go.microsoft.com/fwlink/?LinkID=206669" />

* This source code was highlighted with Source Code Highlighter .

ソースの順序はこれだけです-この場合、公式リポジトリの一部のバージョンを独自のパッチを適用したものに置き換えることができます(たとえば、AjaxControlToolkitでこれを持っています)。

...おめでとう、Shared \ Binモンスターを安全に削除し、ソートコントロールのクリーンさをコミットして楽しむことができます。

Source: https://habr.com/ru/post/J126425/


All Articles