0

プロジェクト 1 とプロジェクト 2 という 2 つのまったく別のプロジェクトがあるとします。1 つは Windows アプリで、もう 1 つは Web アプリです。

両方のプロジェクトが独自の内部使用のためにクラス A、B、および C を必要とする場合、2 つのプロジェクト間でクラスのコードの再利用を促進する最善の方法は何ですか (特にコードは時間の経過とともに更新されます)。

  • クラスを強制的に公開し、整頓された公開インターフェイスを壊して、あるプロジェクトから別のプロジェクトへの参照を作成します (ヤバイ!)
  • 共有コンポーネント用に 3 番目のプロジェクトを作成し、それらをメイン プロジェクト用に内部でのみ使用します (いや!)
  • プロジェクト 1 からプロジェクト 2 にクラスを「追加」し (プロジェクト フォルダーの外に移動)、プロジェクト 2 がそのプロジェクト フォルダー内に構築する必要があるすべてのクラスを持っていないことを受け入れます (受け入れ可能ですが、理想的ではありません)。
  • コピー アンド ペースト、ソース コード管理の相互参照、またはその他の非プログラミング スタントに依存します。
  • 現時点で私を逃れている他のテクニック(指が交差した...)

これらは、両方のプロジェクトに必要な同一の内部ヘルパー クラスであることに注意してください。

4

5 に答える 5

5

アセンブリが別のアセンブリでマークされている型とメンバーにアクセスできるようにするフレンド アセンブリのInternalsVisibleToassembly 属性を使用できます。internal

于 2010-12-13T05:48:44.970 に答える
4

通常、クラス ライブラリ プロジェクトを使用して実装されます。このプロジェクトには、3 つ目のプロジェクト (クラス ライブラリ タイプ) が必要です。

クラス ライブラリ プロジェクトには .dll 拡張子の出力があり、他の .NET プロジェクト (任意の言語で記述) で使用できます。dll を使用するには、ファイルへの参照を追加し、

using the_namespace_of_dll

これが絶対的な解決策です

于 2010-12-13T05:48:00.743 に答える
1

私は通常、別のソリューション(テストを完備)を使用して、参照を追加します。次に、最後にILMergeを使用して、個別のDLLを公開しないようにします(これは、これまでのところ問題なく機能しています)。John Raschが指摘した方法は、「それ」が公開されないようにするために組み合わせて使用​​できますが、私は通常、ユーザー/他の開発者を信頼する側に誤りがあります。

私は[ほぼ]すべてのコストでコピーアンドペーストを避けます。SCMアプローチは機能しますが、実際にはABIの開発を強制するものではなく、さまざまなSCMで十分にサポートされていません。助けのないSVNは、1つの解決策が「所有者」でない限り、かなり悪いです。そうすれば、外観はまあまあ公平になります。

于 2010-12-13T05:55:37.407 に答える
0

このページにアクセスして同じことをしようとしている人には、次のより詳細な説明が非常に明確であることがわかりました。

http://dotnetstep.blogspot.com/2009/01/internalsvisibleto-attribute-usage.html

于 2010-12-13T06:59:28.393 に答える
0

コードを 1 つのプロジェクトに追加し、リンクとして別のプロジェクトに追加します。次に、「InternalsVisibleTo」について心配する必要はありません。ただそこにあるだけです。コードは、両方のプロジェクト (または好きな数のプロジェクト) で同じファイルです。

また

XML .cs​​proj ファイルを編集することを恐れないでください。たとえば、これは機能します...

<Compile Include="$(Codez)\z.Libraries\diff-match-patch\DiffMatchPatch\**\*.cs"
Exclude="NotThisOne.cs;**\NotThisFolderWith\This*.cs">
<Link>Libs\%(RecursiveDir)%(Filename)%(Extension)</Link>
</Compile>

...そして、ソース フォルダーとサブフォルダーのすべての C# ファイルを、宛先プロジェクトのリンクされたファイルとして、\Libs\.

  • $(Codez)PCで使用するWindows環境変数です。
  • *.*の代わりに最後に使用することもできました*.cs
  • これは、Visual Studio が壊れる可能性のあるものの 1 つです。ワイルドカードでリンクされたファイルでいっぱいのフォルダーにファイルを追加すると、ファイルが別のエントリに分割される可能性があります。か否か。風次第です。
于 2015-10-28T03:30:32.130 に答える