0

ProjectAユーティリティ クラスを保持しているプロジェクトがあります。このプロジェクトを複数のソリューションで使用したいので、 のクラスを変更するたびにファイルをコピーしたり、ファイルをリンクしたり、ファイルを更新したりする必要はありませんProject

しかし、問題があるようです: で参照ProjectAしている場合ProjectB、 のコンパイル済みアプリケーションは、その隣にProjectBコンパイル済みアプリケーションがない限り実行できません。ProjectAそのため、出力ProjectBが ProjectB.exe の場合、ProjectA.exe がその隣にない場合、ProjectB.exe は実行時にエラーを返します。何故ですか?ProjectAの名前空間を使用したいだけです。コンパイルされたバージョンの に依存するProjectB必要はありません。ProjectAProjectB

の出力を実行するためにの出力を必要とせずに参照ProjectAする方法を教えてもらえますか?ProjectBProjectAProjectB

4

5 に答える 5

1

名前空間は1つのアセンブリに制限されません。必要に応じて、複数のアセンブリで同じ名前空間を使用できます。また、1つのアセンブリに必要な数の名前空間を含めることができます。

別のアセンブリからクラス/タイプを参照している場合は、元のアセンブリを実行するときに、そのアセンブリが存在する(または配置可能である)必要があります。コーディングだけを行っている場合は、ソリューション内の単純なプロジェクト参照でうまくいきます。ソースコードがない場合Project Aは、コンパイルされた形式で必要になります。ソースコードがないと、CLRはソースコードを検査して、何が含まれているかを知ることができません。

于 2012-09-11T09:09:25.583 に答える
1

おそらく共有dllが必要です。

プロジェクト A (アプリケーション A?) 全体で共有されるため、プロジェクト A にユーティリティ クラスを作成しました。これで、プロジェクト B (アプリケーション B) が導入され、projectA.dll/ からコードを取得する必要があると述べました。 EXE。

したがって、ソリューションに新しいプロジェクトを作成し (Ab.Shared.dll かもしれません:-))、ユーティリティ クラスをそこに移動します。プロジェクト A とプロジェクト B の両方からその dll を参照できるようになりました。

更新:コードの吸い出しについてのコメントを読んでください。

共有 dll は、コードを共有する最も一般的な方法ですが、他の方法もあります。理論的には、同じ *.cs ファイルを両方のプロジェクトに単純に「含める」ことができ、そのように共有できます ([既存のアイテムを追加] ダイアログのドロップダウンを使用し、[リンクとして追加] を選択します)。ただし、実際には、このシナリオを維持するのはより厄介になるため、ほとんどの人は共有 dll を使用します。

于 2012-09-11T09:18:06.827 に答える
0

その場合、ProjectAコンパイルした dll を bin フォルダーに追加し、他のプロジェクトからその dll への参照を追加します。ProjectAプロジェクトへの参照を追加しないでください。

Visual Studio を使用してプロジェクトへの参照を追加する場合、[参照の追加] -> [プロジェクト] を選択すると、プロジェクトをコンパイルする必要があり、dll/exe が他のプロジェクトの bin フォルダーにコピーされます。

于 2012-09-11T09:03:58.960 に答える
0

csprojファイルをテキスト エディターで開き、xml を挿入します。

<Reference Include="AssemblyName.dll">
  <HintPath>$(EnvironmentVariable)\bin\AssemblyName.dll</HintPath>
  <Private>False</Private>
</Reference>
于 2012-09-11T09:07:39.077 に答える
0

私の理解が正しければ、ProjectA.exe には ProjectB.exe で使用したいコードがありますが、実行時には、ユーザーが ProjectA.exe のコピーを持っていなくても ProjectB.exe を実行したいと考えています。

これは不可能です。別のアセンブリの型を使用すると、そのアセンブリが実行時に読み込まれます。タイプは ProjectA から ProjectB にコピーされません。

一般的なユーティリティ クラスを ProjectUtility.dll に抽出し、ProjectA.exe と ProjectB.exe の両方のアプリケーションからそれを参照する必要があるように思えます。

編集: ILMERGE が最適な方法かもしれません。詳細については、C# での静的リンクを参照してください。

于 2012-09-11T09:12:09.877 に答える