web-dev-qa-db-ja.com

複数のプロジェクト間でC#クラスのソースコードを共有する

アプリケーションの内部ロギングを処理するクラスを作成しました。このクラスを別の新しい完全に別のプロジェクトで使用したいと思います。

ファイルを新しいプロジェクトフォルダーに単にコピーすることもできますが、ファイルのすべての変更が長期にわたって両方のプロジェクトに適用されるように、ファイルのコピーを1つだけ保持したいと考えています。

「既存のファイルを追加する」を使用できますが、次の開発者が必要であることを知らせるために、ファイルをどこに配置しますか。私はかつてこのための「共有」フォルダを持っていましたが、そのフォルダが次の開発コンピュータに持ち込まれなかったことがあります。

これを編成して、新しいメンテナにとって最も意味があり、プロジェクトのリンク切れのリスクを最小限に抑えるための最良の方法は何ですか。

39
hultqvist

このようにして、このクラスを持つライブラリプロジェクトを作成し、そのプロジェクトへの参照を追加するだけで済みます。

それがオプションでない場合は、「右クリック->既存のアイテムを追加->リンクとして追加」を使用して、コードのコピーを1つだけ持つことができますが、複数のプロジェクトに存在できます。

39
Peter

共有するクラスライブラリが最適なソリューションです。

ただし、コピーするのではなく、リンクとしてファイルをVSプロジェクトに追加できます。これを行うには、既存のアイテムの追加ダイアログの[追加]ボタンのドロップダウンを使用します。

12
Richard

実際にソースコードを共有する必要がある場合、たとえば、同じアセンブリの32ビットと64ビットの同時ビルドがある場合(ネイティブコードに依存する場合に必要になる場合があります)、次の回答を使用できます。このスレッドでは: Visual Studioのプロジェクト/ソリューション間でコードをどのように共有しますか?

(「2つのプロジェクト間のコードファイルを「リンク」してください。)

6
jorgen

ロギングコードを別のアセンブリに分割します。

次に、そのロガーを使用するプロジェクトにそのアセンブリを含めることができます。

それはすべてを素晴らしくクリーンに保ち、各コピーについて心配する必要はなく、コードの1つのセットを維持するだけで済みます。

5
Justin Niessner

クラスを一意の名前空間に配置し、使用する必要があるすべてのプロジェクトへのリンクとしてファイルを追加します。クラスを使用する一意の名前空間にusingステートメントを配置することを確認してください。そうしないと、クラスのすべての使用を完全に修飾する必要があります。このような状況では、プロジェクト間で共有したい独自のコードの一部であるものに対して、不要なクロスアッセンブリ参照を生成しないので、これはアセンブリよりもはるかに望ましいと思います。

1
ThunderGr

このクラスを含む新しいアセンブリを作成します。

その後、他のすべてのプロジェクトがこのアセンブリを参照し、その内部でクラスを使用できます。

1
Mongus Pong

バージョン管理システムを使用してこれを行うこともできます。

通常、ソリューションとメインプロジェクトのあるディレクトリを作成し、このディレクトリをSVNにコミットします。次に、すべての共有ライブラリがsvn:externalを使用してリンクされます-したがって、すべてのプロジェクトは同じソリューションディレクトリに存在します。

コミット後、誰でもすべての外部依存関係を備えた実用的なソリューションをチェックアウトできます。

0
kwesolowski