.NET依存関係管理システム


8

依存関係管理ソリューションを検討するに値するほど大きくなり始めている.NETプロジェクトがいくつかあるので、あるプロジェクトから別のプロジェクトにバイナリをコピーする必要はありません。これが私がこれまでに見つけたものです:

  • NPandayはMavenのポートに基づいています。最近どのように取り組んだかはわかりませんが、最後のリリースは2011年5月でした。
  • NuGetは活発に開発中であるようで、Microsoftから直接サポートされているようです。「依存関係の解決にのみ対処する」と不満を言うもいますが、それ以外に何を対処すべきか、またはそれ以降に機能が追加されたかどうかはわかりません。最近、ビルドプロセスの一部としてバイナリをインポートする機能が追加されたようです。そのため、リポジトリにコミットする必要はありません。
  • 2011年9月以降、何の注意も払われていないため、Refixはまだベータ版のようです。

これらの依存関係管理ツール(またはうまく機能する他のツール)を使用した最近の経験を持つ誰かがあなたの経験を共有しますか?NuGetは依存関係管理にそれを使用するのに十分成熟していますか?そうでない場合、何が不足していますか?


1
あなたはopenwrapを見逃しました
2012年

私は1つを開発しています。それはまだアルファ版ですが、当社で正常に使用されています(50を超える開発者)。まだドキュメントはありませんが、オープンソースです。NuGetは、RefixとNPanday(醜いMavenアドイン)と同様に機能しませんでした。
Ivan G.

@aloneguid:NuGetがうまくいかなかった理由を教えてください。
StriplingWarrior

NuGet?見た目が汚いだけで、パッケージからPSスクリプトを実行する場合があり、暗黙的にPS依存関係があります(議論はできますが、そうです)。VSでは重すぎます。バージョンの競合を検出しません(または検出しませんでした)。
Ivan G.

@aloneguid:私はこのトピックについて何も知らないと仮定します。PS / VSとはどういう意味ですか?
StriplingWarrior

回答:


5

NuGetがおそらく私の答えです。RubyGemsの上に置かれていた前駆体(Nu)を処理した後、何かに向けたリソースを持つことは役立つと言えます。リモートジョブに加えてローカルリポジトリがあったため、ジョブが完了すると、実行可能ファイルのパッチバージョンが作成されました。彼らがまだその問題を修正したかどうかはわかりませんが、パッチを受け入れているので、簡単に修正できるはずです。私が取り組んでいる.NETアリーナのすべてのオープンソースプロジェクトで、NuGetを通じてすべてを行っています。チェーンを公開するのには少し時間がかかりますが、はるかに簡単です。

OpenWrapはオプションですが、すべてを構築する必要があります。それはちょっとお尻の痛みです。プロジェクトを正しく構築できない場合は、対処に時間がかかります。Openwrapはこれを長い間解決しようと試みてきましたが、それでも本当に厄介です。バイナリのみの配布ははるかに簡単です(時々)...

私がよく知らない他の2つ。だから私は彼らにコメントすることはできません。


NuGetは、初心者がパッケージ管理に移行するようなものです。それはおそらくパッケージをより簡単にダウンロードするのに役立つだけですが、それ以上のことはできないと思います。Mavenと比較して、依存関係管理システムの機能を理解してください。
Ivan G.

1
@aloneguid:では、私はパッケージ管理の初心者なので、NuGetは、満たされていない追加のニーズがあると判断するまで、私にとって論理的な最初のステップになるでしょうか?
StriplingWarrior '06 / 06/18

@aloneguid NuGet 2.7で導入されたNuGetパッケージの復元機能を確認してください。NuGetがMavenの依存関係管理機能に少し近づくようです。
マーティンクリンケ2014年

2

NuGetの最新バージョンをダウンロードして、前回からの変更点を確認しました。私が間違っている場合は修正してください(私は自分のものをnugetに移行することを本当に考えています):

NuGetパッケージは、まだパッケージの依存関係として「プラットフォーム」を指定していません。「Ninject」をインストールしたばかりで、サブフォルダ「パッケージ」内の.NET 4.0バージョンを参照しています。私のプロジェクトは4.0にあるため、これは最良の推測だったと思いますが、それは非常に危険だと思います。パッケージの依存関係によってどのプラットフォームが選択されるのかもわかりません。

「パッケージの復元」機能は、カスタムの事前構築ステップを追加して私のソリューションを変換します。ソリューションファイルを変更するのは好きではありませんが、問題ありません。新しいバージョンをチェックする頻度がわかりません(プライベートリポジトリの頻度をかなり頻繁に設定したいと思います)。

私はここで完全に間違っているかもしれませんが、パッケージのバージョンがアップグレードされても、nugetはプロジェクトの依存関係を自動的にアップグレードしないようです。パッケージの復元により、新しいパッケージバージョンの新しいサブフォルダーが作成されますが、Visual Studioからそのフォルダーを手動で選択して、事前に参照を削除する必要があります。

一部のパッケージ(jQueryなど)は、起動時に埋め込みPowerShellスクリプトを実行します。カスタム実行とPSの依存関係が好きではありません。これは常にWindowsに存在するわけではなく、Monoの非Windowsビルドにはまったくありません。ちなみに、以前にMSBuildについて述べたように、この依存関係でさえ一部のC ++ビルドを満足させるのは現実的ではない場合があります(そうしないと、パッケージの復元機能を見逃してしまいますか?)。

最後の1つはそれほど重要ではないかもしれませんが、依存関係が非常に多い場合、依存関係を復元するにはある程度の時間がかかります。


0

この時点では、NuGetが依然として最良のオプションです。

依存関係マネージャーとしてのNuGetの主な問題は、「ビルド時」の依存関係マネージャーではなく、「開発時」の依存関係マネージャーであることが想定されていたことです。

開発者はVisual Studioを介してNuGetパッケージを復元します。これにより、復元中にPowerShellスクリプトが実行され、プロジェクト内のファイルが変更されます。

これは、依存関係を追加して解決すると依存関係を参照しているシステムが変更される可能性があるため、これまで見た他の依存関係管理システムとは異なります。

PowerShellスクリプトでべき等性を確認または確認するための組み込みメカニズムはないため、同じファイルセットで複数回実行すると確定的ではない場合があります。

開発時にVisual Studioを介してパッケージをプルするために多くの場合NuGetを使用しているようですが、ビルドサーバーでどのように動作するかについての確固たる推奨は知りません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.