6

私は現在、定期的に使用している「ヘルパー」スタイルの拡張メソッドをいくつか持っています(それらはほとんどが非常にシンプルで直感的であり、悪ではなく善のために機能するため、これを使用するかどうかについての議論に陥らないでください)。 )。これらは、コア .NET CLR クラスを大幅に拡張しています。

現在、拡張メソッドを保持する 'ExtensionMethods.cs' ファイルをソリューション内の新しいプロジェクトごとにコピーして、それらを複数のプロジェクトで使用できるようにする必要があります。

ソリューション内の複数のプロジェクトで動作するように拡張機能を定義することは可能ですか?それとも、それらを「拡張機能」DLL にラップすることはできますか?それともプロジェクトの範囲に限定されますか?

編集「専用プロジェクト」の回答は完全に有効ですが、彼が提供するアプローチを好むため、マルキシダードを選択しました。これまでのすべての回答に感謝します。すべて良い回答だったので、すべてアップモッドしました。

4

5 に答える 5

9

拡張メソッドのためだけにプロジェクト全体を作成したくない場合は、ファイルをコピーせずに、同じファイルを別のプロジェクトにリンクできます。

  1. ソリューション エクスプローラーで、ターゲット プロジェクトを選択します。
  2. [プロジェクト] メニューを選択します。
  3. [既存のアイテムを追加] を選択します。
  4. [既存のアイテムの追加] ダイアログ ボックスで、リンクするアイテムを選択します。
  5. [開く] ボタンのドロップダウン リストから、[リンクとして追加] を選択します。
于 2008-10-02T03:54:15.780 に答える
5

最善の方法は、それらすべてを 1 つのプロジェクトに入れて DLL を作成することです。次に、そのプロジェクトをプロジェクト参照として含めるか、DLL をバイナリ参照として含めることができます (おそらく、より良い選択です)。

于 2008-10-02T03:47:05.627 に答える
2

拡張機能を別のプロジェクトに配置し、作成中のすべての新しいソリューションにそのプロジェクトを含めることができます。

バージョン管理には注意してください。たとえば、他のアプリケーションが拡張プロジェクトに変更を加えようとした場合、そのメソッドを使用するすべてのプロジェクトを再テストする必要があります。

Scott Dorman も彼の投稿で正しいです。それらを変更したくない場合は、(コンパイルされていないプロジェクトを含めるのではなく) 新しいプロジェクトに含める DLL ライブラリとしてコンパイルできます。

于 2008-10-02T03:47:06.343 に答える
1

.NET プラットフォームへの拡張機能のプロジェクトを作成し、各アプリケーション プロジェクトでその 1 つのプロジェクトを参照します。言うまでもありませんが、すべてのプラットフォーム関連の要素 (プラットフォーム関連の要素のみ) が 1 つのプロジェクトに含まれます。アプリケーションのものはあなたのアプリケーションプロジェクトに入ります。

ベース プラットフォームに一連の拡張機能を提供するUmbrellaなど、さまざまなプラットフォーム ライブラリを調べることもできます。

于 2008-10-02T03:50:42.730 に答える
0

いくつかの回答は、誰かが拡張機能を共通のアセンブリに入れることを示唆しています。これが正しい答えです。しかし、初心者にとって奇妙なことがあります。IntelliSense は十分に役に立ちませんでした。関数/メソッドで を拡張したObservableCollectionとしましょう。ReplaceRange拡張関数のクラスを移動した後、最初にコンパイラーは次のように言い error CS1061: 'System.Collections.ObjectModel.ObservableCollection<WhateverDto>' does not contain a definition for 'ReplaceRange' and no extension method 'ReplaceRange' accepting a first argument of type 'System.Collections.ObjectModel.ObservableCollection<WhateverDto>' could be found (are you missing a using directive or an assembly reference?) ます。問題のあるReplaceRange呼び出しにカーソルを合わせると、適切な using ステートメントを自動的に含めるように提案されません。その時点で、誰かが自分が何か間違ったことをしたと思うかもしれません。ただし、拡張メソッドがどこにあるかを知る必要があるだけであり、メソッドの名前空間の using ステートメントを手動で入力する必要があります。その権利を得た後、ソースはコンパイルされます。

于 2013-04-05T21:38:41.947 に答える