7

1 つの .Net c# プロジェクトを複数の dll にコンパイルしようとしています。しかし、ここに問題があります。

これが私のプロジェクト構造です。

Bin 
Dir1 
Dir2 
File1.cs 
File2.cs 
myproject.csproj

このプロジェクトを File1.dll と File2.dll にコンパイルします。File1.dll と File2.dll はどちらも、Dir1 と Dir2 にあるさまざまな .cs ファイルのコードを使用します。サブディレクトリにある .cs ファイル内のこれらのクラスの一部は、File1.cs で必要とされ、その他は File2.cs で必要とされます。File1.cs と File2.cs の両方で使用されるものもあります。

私は以下を使用しました:

csc /t:library /out:File1.dll /recurse:*.cs
csc /t:library /out:File2.dll /recurse:*.cs

しかし、結果として得られる dll は、ファイル名が異なるだけで、お互いの正確なコピーでした。オブジェクト ブラウザーで各 dll を検査するときに、Dir1 と Dir2 の .cs ファイルから、File1.cs 内で File1.dll と同様に参照されているクラスのみが含まれるように、それらをコンパイルする方法はありますか? File2.dll?

Visual Studio でのビルド後のステップの一部として、できればこれを行いたいと考えています。

御時間ありがとうございます...

編集

ご回答ありがとうございます。ソリューションを多くのプロジェクトに分割するための多くの提案がありました。これは 1 つの方法ですが、File1.dll と File2.dll の 2 つの dll に対して作成された依存関係が必要かどうかはわかりません。説明させてください..

複数のプロジェクトを作成する際の問題は、File1.cs と File2.cs の両方に必要なコードがいくつかあることです。両方のプロジェクトでそれらを繰り返したくありません。共通コードを 3 番目のプロジェクトに保持するということは、File1.dll と File2.dll の両方に必要な 3 番目の dll が作成されることを意味します。私はこれをしたくありません。File1.dll と File2.dll のみを作成したいので、両方を 1 つのプロジェクトに保持しています。これを実現する方法について何か提案はありますか?

返信ありがとうございます。

乾杯。

4

4 に答える 4

11

コンポーネントごとに個別のライブラリが必要な場合は、プロジェクトを同じソリューション内の複数のプロジェクトに分割する必要があります。

Add as link重複したコードの問題を回避するために、重複したコピー()を作成せずに、同じファイルを複数のプロジェクトに含めることができます。

于 2012-09-11T12:52:58.833 に答える
3

条件付きコンパイルシンボル(#if DLL1#if DLL2)を使用できます。

次に、ビルドステップで、/p:DefineConstantsこれらのシンボルを設定するオプションを指定してmsbuildを呼び出します。

MSBUILD /p:DefineConstants=DLL1 ...

基本的に、異なる条件付きコンパイルシンボルを設定してプロジェクトを2回コンパイルします。

于 2012-09-11T12:56:45.370 に答える
2

作成するDLLごとに1つのプロジェクトを作成し、それぞれに固有のファイルを追加します。たとえば、myproject1.csprojを含むFile1.cs(および必要に応じて他のファイル)およびmyproject2.csprojを含むFile2.cs。その後、共通ファイルを含む3番目のプロジェクトを作成し、最初の2つのアセンブリを共有する参照を作成します。

または、さまざまなコードを含めたり除外したりする場合は、プリプロセッサ定数をチェックする#ifステートメントを検討してください。

于 2012-09-11T12:54:16.007 に答える
1

これを行うには、複数のプロジェクトが必要です。複数のプロジェクトから同じCSファイルを参照することを妨げるものは何もありません。

また、そうすることが理にかなっている場合、論理的なグループ化が必要な場合は、両方のプロジェクトを1つのソリューションの下に存在させることができます。

于 2012-09-11T12:54:03.587 に答える