2

重複の可能性:
[アセンブリ: InternalsVisibleTo()] はいつ使用する必要がありますか?
dll メソッドへのアクセス

A.dll と B.dll の 2 つのアセンブリがあります。A.dll にはいくつかの共通機能があり、B.dll はそれを使用します。最終的には、A.dll と B.dll を他のユーザーに配布する必要があります。

ただし、A.dll には (B.dll で使用するために) public としてマークしたメソッドがいくつかありますが、他のユーザーに使用してほしくありません。

これを達成する良い方法はありますか?InternalsVisibleToAttributeこれを達成するための良い習慣の使用はありますか?

4

3 に答える 3

9

A.dll で項目を内部としてマークし、次のアセンブリ プロパティを追加します。

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo( "B" )]

ただし、リフレクションを介して内部のものにアクセスできるため、100% 封印されていないことに注意してください。

于 2012-07-25T13:42:32.303 に答える
1

属性はこれを行う 1 つの方法ですが、すべての内部を他のアセンブリにInternalsVisibleToAttribute公開することを理解する必要があります。

また、署名されたアセンブリを使用していない場合は、その名前InternalsVisibleToAttributeアセンブリから内部へのアクセスが許可されることに注意してください。それは望ましくないかもしれません。

別のオプションは、ツールを使用して、必要なコードをアセンブリ "A" からアセンブリ "B" に挿入することです。これにより、「B」は内部にアクセスせずに独立して機能できます。それが望ましい解決策であるかどうかは、アセンブリの使用方法によって異なります。

最後に、リフレクションを使用してアセンブリ "A" のコードにアクセスできます。少し面倒ですが、必要なものがいくつかあれば十分かもしれません。これにより、アセンブリ "B" は存在するが A が欠落している場合に、優れたフォールバックまたはエラー処理を提供することもできます。

他の人が指摘したように、リフレクションは、アセンブリの内部または外部のあらゆるものへのアクセスを提供できます。コードを保護する必要がある場合は、難読化を検討する必要があります。

于 2012-07-25T13:51:44.967 に答える
1

InternalsVisibleTo行く方法です。

あなたの質問のタイトルは最初は少し混乱していましたが、読んだ後、特定のアセンブリからアクセスできるinternal(ではない ) メンバーが必要であることは明らかでした。public

于 2012-07-25T13:43:04.987 に答える