マルチターゲット .NET ライブラリのベスト プラクティス
-
25-09-2019 - |
質問
私はオープン ソース (MIT) .NET ライブラリをリリースする予定ですが、すべてを自分でコンパイルする必要がないように、人々が簡単にできるように DLL も含めます。
私のライブラリは参照する型が非常に単純化されており、唯一の実際の依存関係は .NET 3.0 以降のようです (参照しているため) Func<T>
など)。
ライブラリを、.NET 4.0 サーバー、.NET 3.5 サーバー、Windows Phone 7 Silverlight、通常の Silverlight、XNA (Phone)、XNA (Windows)、XNA (XBox 360) などの複数のターゲットで使用できるようにしたいと考えています。
私は、対象のプラットフォームで利用できないタイプは使用しないようにしています。 HashSet<T>
Windows Phone 7 では利用できないため、使用していません。
これらのターゲットごとに異なるプロジェクト、つまり複数の DLL を作成する必要があるのでしょうか、それともすべてのターゲットで使用できる共通の DLL を作成する方法はあるのでしょうか?
解決
今年の PDC では、この種のことを行うことについて話がありました。
これがビデオです そして これらはスライドです.
他のヒント
共有、共通のソースファイルで区切りプロジェクトファイルが移動するための方法です。必ずプロジェクトが(デスクトップおよびデバイスのプロジェクトのような)複数のターゲットからライブラリを消費迷惑を防止するために、異なる出力フォルダ(例えばない\bin\Debug
が、\CF\bin\debug
)にビルドに設定されていることを確認します。
ここで確認してくださいそれらのすべてをあなたが/変更ファイルを追加したときに同期して、プロジェクトのすべてのファイルを維持して作っている主な痛みのポイントは、常にコンパイル。ビルドサーバーを行うことができます(CodePlexには、残念ながら公開していません)自動化へのアクセス権を持っている場合。
私は、.NETとSilverlightを対象ライブラリと似た何かを。私は、同じ共有ファイルへのリンクをそのソースファイルと、別のプロジェクトファイルの単一のセットを持っています。
時々私はちょうど.NETとないSilverlightの特徴を含むように、または.NETで使用可能な機能を利用するために、条件付きコンパイルを使用し、それがギャップを持っているよりよい実装とSilverlightのためのフォールバック実装に鉛ます。
同じアプローチは、あなたが言及他のプラットフォームを使用することができる - 。1つのソース・ファイルのセットが、プラットフォームターゲットごとに別々のプロジェクトファイル
あなたがMSBuildのかNAntのようなビルドツールを使用している場合は、スクリプトを実行するとき、あなたは、すべてのターゲットプラットフォームのためのすべてのDLLのビルド農産物を持つことができます。
見てください ポータブルライブラリツール (最終更新:2011 年 6 月 17 日) からの延長 BLC チーム (マイクロソフト) そして今回の紹介文 MSDN の記事 (最終更新:2011 年 8 月)。
を提供している図書館のそれぞれる。"これがコンセプトです。
そうすることで全 .NET Framework
を含んの特徴されていないメソッドの一部 .NET Compact Framework
のんとと Windows CE
-スマートフォン。での全負荷の可能性のそれぞれのプラットフォーム、レバレッジの共図書館がたっぷりのインタフェース、その実施方面内の .NET Framework platform specific
クラスライブラリが使いやすさにこだわりを十分に活用では特定の。
一方、が共通の再利用コードのためのメンテナンス性、すなスタイルを好まれるかにシングル"ない"の図書館があります。下にはこのような要請が必要に周知徹底するとともにそれぞれの違いに多くのプラットホームをご希望のご支援しています。
これが重要な分析と建築の問題としての苦しむのが一つのプラットフォームの上します。
この場合どのように進むのなでしこジャパンにつながる状況:
- 私の調査との違いはプラットフォームに依存します。NET Framework;
- いて全て(必要に応じ)の物と思いま必要がある場合があります;
- したいの違いは、物体に使用でき下で、ひとつのプラットフォームなど
これは有機分析までを行うために何を参照す。
では、何らかの滝ます。
そして、スクラムアプローチだということもありうるのは経験主義んじゃないでしょうかい単一の図書館のためのすべて、何ができる。例えば、一部のものは絶対にできない、それに関連したものでなければなりのみを別のクラスライブラリをお使いの環境によっては"なし"の図書館のように共通のブロックそれぞれのプラットフォーム、その他の特定の図書館などができませんでいます。いう利点だったからで、こうしたトラブルが付属により異なります。