0

Visual Studio 2010 Pro を使用して、2 つのプロジェクトを含むソリューションを構築しています。プロジェクト A には私のソース コードの大部分が含まれていますが、プロジェクト B は独立して実行することを目的としていますが、プロジェクト A に含まれているソース コードの一部を使用する必要があります。

現在の構成では、プロジェクト A はプロジェクト B 内の参照として含まれています。各プロジェクトのバージョンを個別にビルドおよび維持できるようにしたいのですが、ソリューション全体をビルドすると、ProjectB.exe がないと実行できないようです。同じローカル ディレクトリにある ProjectA.exe。.exe バイナリがコンパイルされたときに、すべての依存関係がそれぞれにパッケージ化されていることを願っていますが、そうではないようです。実際、ProjectA.exe が存在しないときに ProjectB.exe を実行しようとすると、System.IO.FileNotFoundException が発生します。

独立して実行され、コードの重複を回避するバージョンの ProjectB.exe をビルドする方法はありますか?

4

3 に答える 3

1

共通コードが必要な場合、最善の解決策は、共通クラスを3番目のアセンブリに分割してライブラリとして機能させることです。(Adrianoの提案による。)彼が示唆する他のオプションは、2番目のプロジェクトに「既存のファイルを追加」を使用するときに「リンクとして」オプションを使用することです。

それがどこにあるかわからない場合は、[既存のファイルを追加]オプションを使用し、ダイアログボックスでファイルを選択します。[追加]ボタンには、[リンクされたファイルとして]を選択できるドロップダウン選択があります(またはその効果のための何か。)

これにより、同じクラスを複数のプロジェクトにコンパイルできます。ただし、リンクされたファイルの名前空間は2番目のプロジェクトでは変更できないことに注意してください。名前空間が「ProjectA.Domain」の場合、これはプロジェクトBでアクセスする必要がある方法です。これは、マルチプラットフォームアセンブリが導入される前のSilverlightプロジェクトにとって便利なトリックでした。

于 2012-11-28T22:18:08.760 に答える
1

Adrianoがコメントで示唆したように、Aへの依存を取り除きたい場合は、共通論理を別のプロジェクト(Cと呼びましょう)に抽出する必要があります。

プロジェクト間の結合をさらに緩くする必要がある場合は、A(またはC)をプロジェクトとしてではなく、ビルドされたアセンブリ(.dllファイル)として参照し、Specific Version参照プロパティをで確認できますTrue。さらに、プロジェクト/コードベース構造がより複雑な場合は、ここでより多くのアセンブリ共有オプションを確認してください

于 2012-11-28T22:16:54.480 に答える
0

いくつかのオプション:

  1. 共通オプション: 共通コードを 3 番目のクラス ライブラリ (DLL) プロジェクトに分割します。そして、ProjectA と ProjectB の両方をそれに依存させます。欠点は、プロジェクトを実行するために 2 つのファイル (メインの exe と dll) が必要になることです。この方法は、ほとんどのソフトウェアが開発される方法です: 単一の実行可能ファイルと多数の DLL です。
  2. 正しいオプション: 共通コードを 3 番目のプロジェクトに分割し、プロジェクト ファイルを変更して、両方のアセンブリを含む実行可能ファイルを作成します (アンマネージ コードの静的にリンクされたライブラリに似ています)。これを行うには、実際には MS-Build 定義ファイルであるプロジェクト ファイルを変更する必要があります。
  3. 醜いオプション: ProjectA の共通ファイルのショートカットを ProjectB に作成します。これは、共通コードを別のプロジェクトにコピーするのと同じですが、ソース ファイルは 1 つ残ります。欠点は、すべてのファイルに対してこれを行い、両方のプロジェクトで同じ構造を維持する必要があることです。これは、実行可能であるとしても、見苦しいオプションです。他のいずれかを選択します。
于 2012-11-28T22:26:18.950 に答える