2008-09-03 6 views
3

私が働く会社では、私たちが構築するアプリケーションによって参照される「ユーティリティ」プロジェクトがあります。それは、NullHelpers、ConfigSettingHelpers、Common ExtensionMethodsなど多くのものを持っています。Common/Utilityライブラリを使用して作業する

私たちが作業する方法は、新しいプロジェクトを作成するときに、ソースコントロールからプロジェクトの最新バージョンを取得してソリューションに追加し、ソリューションに追加された新しいプロジェクトからプロジェクトを参照してください。

これはうまくいきましたが、人々が共通のプロジェクトに「大きな変更を加えました」という2つのインスタンスがありました。これらのプロジェクトは共通のプロジェクトには効果がありますが、他のプロジェクトでは機能しません。

私は、共通ライブラリをプロジェクト参照として追加するのではなく、おそらくスタンドアロンのdllとして共通ライブラリを開発し、異なるバージョンを公開し、特定のプロジェクトの特定のバージョンをターゲットにして変更を加える共通ライブラリを使用して他のプロジェクトにリスクを与えることなく作成されました。

他の人が共通のライブラリを参照または使用する方法を知りたいと思っています。

+0

http://ayende.com/blog/3986/let-us-burn-all -those-pesky-util-common-libraries –

答えて

5

これはまさに私たちがやっていることです。我々は、いくつかのプロジェクトに固有の有用な機能を持つユーティリティプロジェクトを持っています。手動でバージョンを増やし(マイナー)、リリースバージョンでプロジェクトをビルドし、署名して共有場所に配置します。

人々は特定のバージョンのライブラリを使用します。

主なユーティリティプロジェクトに入る可能性のあるいくつかの特定のプロジェクトにいくつかの便利なメソッドが実装されている場合、プロジェクトに特別なヘルパークラスを置き、それらを可能なユーティリティ候補(単純なTODO) 。プロジェクトの最後に候補者を確認し、それが固執すれば、のメインライブラリに移動します。

変更を破棄する必要はありません。メソッドとクラスは、必要に応じて[廃止]としてマークします。

しかし、パブリッシュするたびにバージョンが上がるので、実際には問題にはなりません。

これが役に立ちます。

1

私はを持っています。同じ問題です!

私はプロジェクトリファレンスを使用していましたが、それはすべてが悪いと思われます。あなたが言うように、多くのプロジェクトがそれを参照しています。

私は今、DLLにコンパイルし、最初のビルド後にDLL参照のCopyLocalプロパティをfalseに設定します(そうしないと、サブプロジェクトをオーバーライドして混乱する可能性があります)。

私は理論的には、それはおそらくGAC'edしなければならないと思いますが、多くのことを変更しているその問題(私のように)、これが問題になることができます。..

3

は、私たちは、ソース管理に分岐を使用する場合、誰もが解放を行うまで頭部枝を使用します。彼らはリリースをブランチすると、共通のユーティリティプロジェクトもブランチします。

さらに、私たちのユーティリティプロジェクトには独自の単体テストがあります。そうすれば、他のチームは他のチームのビルドを壊すかどうかを知ることができます。

もちろん、時折言われる​​ような問題があります。しかし、あるチームが別のチームのビルドを壊す変更をチェックすると、通常、そのメソッド/オブジェクトの契約がどこかで壊れていることを意味します。これらを共通ユーティリティプロジェクトの設計を改善する機会として、または少なくともユニットテストをもっと書くようにしています:/

+0

私が単体テストで見つけた問題は、単体テストの細かい概念のいくつかを理解できていないことです彼らのニーズに合うように、コードは単体テストに合格しますが、元々意図していたものを実際には実行しません。 – lomaxx

+0

@lomaxx:それは難しくなります:)。人々が単体テストを変えないように言っているだけでなく(各チームのテストを自分自身のフィクスチャやプロジェクトなどに入れている)、単体テストの人々を訓練する以外に、どう対処できるかはわかりません。より簡単に言われました。 –

関連する問題