OpenWrapとNuGetの違いは何ですか。そして、あなたは何を好みますか?
3 に答える
OpenWrapは、ビルド時だけでなく実行時にもアプリケーションの依存関係管理を提供するオープンソースプロジェクトです。
そのため、当社の機能は、複合WPFアプリケーション、Webアプリ開発、またはシステム全体のユーティリティなど、依存関係の動的な解決を対象としています。これにより、NuGetの実装とは大きく異なります。
ですから、ここで異なる点があります(私はおそらく多くのことを忘れますが、まあまあ)。
- Visual Studioに依存せず、UIではなくコマンドラインでの生産性に重点を置きます
- PowerShellに依存することなく、OWには独自のコマンドシステムが付属しており、シェル(o.exeツール)からでもMSBuild自体からでも、独自のコマンドを開発、展開、実行できます。
- OpenWrapは、OpenWrapを使用してそれ自体を構築およびデプロイし、あらゆる段階でxcopyに対応しています。
- パッケージのシステム全体のリポジトリがあるため、ソリューションごとに1回ではなく、1回ユーティリティコマンドをデプロイできます
- 実行時に動的な依存関係の解決をサポートします。
- 拡張可能なパッケージ形式を備えているため、パッケージに新しいタイプの依存関係を作成し、OpenWrapを使用してアプリケーションでそれらを使用することができます。
- OpenWrapパッケージとNuGetパッケージおよびリポジトリの両方をサポートします
- XMLとODataの複雑さから十分に離れており、簡単ですばやく習得できるシンプルなテキストベースのDSLを採用しています
- 統合ビルドをサポートしているため、ソリューションを一度にビルドしてパッケージ化できます
- openwrapシェルまたはmsbuildタスクから公開できるネットワーク共有上のカスタムリポジトリをサポートします
- 依存関係の平準化を提供し、パッケージのバージョンのどの組み合わせを解決するかを自動的に選択します
- Resharper統合とは、依存関係に加えた変更がリアルタイムでVSに反映されることを意味します
- TeamCityの統合とは、MSBuildスクリプトまたはコマンドラインから、まったく同じプロセスを使用してパッケージをビルド、パッケージ化、および展開できることを意味します。
- 拡張可能なビルダーは、OpenWrap内でビルドがトリガーされる方法を変更できることを意味します
- パッケージと一緒にテストランナーと出荷テストのサポート
- サポートされているMSBuild拡張ポイントを使用してアセンブリ参照を含め、作成したコードはそのままにします。バイナリを出荷すると、ビルド時にのみ、openwrapコードの依存関係はなくなります。
それはあなたが尋ねたものであるため、それは違いのためだけです、それで私は他のパッケージマネージャーと同じように私たちがすることであなたを悩ませません。
物事のNuGet側からのいくつかの考えを取り入れたかっただけです。Sebは、指摘する価値のあるいくつかの詳細を省略しています。
- プライマリUIはVSベースですが、コアNuGetアセンブリはVSとは関係ありません。ASP.NET Web Pages製品には、Webベースのパッケージマネージャーがあります。NuGetを使用して実行時に自身を更新するWebサイトを構築する一例を示すブログ投稿を作成しました。http://haacked.com/archive/2011/01/15/building-a-self-updating-site-using-nuget.aspx
- NuGetは、強力なPowerShellコンソールを提供します。NuGetパッケージは、コンソールに新しいコマンドを追加できます。http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/を参照してください。以前と同様に、これはNuGetの1つのクライアントであり、NuGetコアはそれを必要としません。
- NuGetは、VS Extension Galleryを介してインストールでき、すぐに開始するのは非常に簡単です。
- NuGetは、パッケージのセットを含むディレクトリ(またはネットワーク共有)へのクライアントの指定をサポートし、それをリポジトリとして自動的に処理します。したがって、ODataを扱いたくない場合は、そうする必要はありません。ただし、ギャラリーの実装も含まれているため、どのような場合でもOData/XMLを手動で処理する必要はありません。
- NuGetでは、アプリケーションの一部としてNuGetの一部を展開する必要はありません。それは手放しであり、依存関係を取得して展開するためにNuGetなしで実行するステップの自動化に焦点を合わせています。明確にするために、Sebが指摘しているように、OpenWrapもそうではありません。NuGetもこれを必要としないことを明確にしたかっただけです。
NuGetの重要な信条の1つ(およびOpenWrapとの重要な違い)は、作業方法を変更しようとしないことです。代わりに、今日すでに行っていることをはるかに簡単に行うことができます。
たとえば、Barライブラリに依存するFooライブラリを使用しようとしているとします。今日では、これらのライブラリを手動で検索し、それらをマシンにコピーして、それらへの参照を追加する必要があります。その後、新しいバージョンがリリースされ、同様の動作を実行して更新されます。
このようなシナリオでは、NuGetとOWの両方を使用すると、これらの参照を簡単に取り込むことができますが、主な違いは、NuGetが完全に非侵襲的な方法でそれを行うことです。つまり、バイナリをマシンに取り込み、手動で行った場合と同じ方法でそれらを参照します。それが完了すると、プロジェクトファイルは完全に「通常」になり、ビルド時または実行時にNuGetとは関係ありません。
つまり、NuGetを介していくつかのライブラリを取得し、プロジェクトをソース管理に置くと、別の開発者がNuGetをまったく必要とせずにプロジェクトを使用できるようになります。
OpenWrapアプローチにもメリットがありますが、そのルートを進むには、OpenWrapをずっと使用することをいとわず、簡単に離れることができないようにする必要があります。
他にも多くの違いがありますが(NuGetでの豊富なVSサポートなど)、これが2つの最も基本的な違いであると私は考えています。