none
DLLの非公開 RRS feed

  • 質問

  • お世話になります。

    作成したDLL(アセンブリ)を特定のホストからしか使用してほしくない場合、
    単体テストで使用されるInternalsVisibleTo属性を使用するべきですか。
    InternalsVisibleTo属性にpublickeyを渡すことで対応できそうなのですが、
    対象となるホストが複数ある場合はどうのようにするべきですか。

    また別の方法がありますか。

    教えてください。

    2010年12月13日 8:22

回答

  • internal による可視性の変更は、簡単に参照できないだけであって、十分な権限があれば呼び出すことはできます。この制限で十分であり、対象となる呼び出し元が列挙できるのであれば、InternalVisibleToAttribute で充分かと思います。(この属性は複数設定できます)

    より強固に実行不可能にしたい場合、SecurityAttribute や Demand() 等を利用して、メソッドのコンパイル時や呼び出し時に権限チェックを行うのが一般的かと思います。

    • 回答としてマーク 山本春海 2010年12月28日 2:16
    2010年12月14日 0:00
  • InternalsVisibleTo属性にpublickeyを渡すことで対応できそうなのですが、
    対象となるホストが複数ある場合はどうのようにするべきですか。

    複数書けば良いと思いますが、何か支障があるのでしょうか?

    作成したDLL(アセンブリ)を特定のホストからしか使用してほしくない場合、
    単体テストで使用されるInternalsVisibleTo属性を使用するべきですか。

    正直、これの効果に疑問を持ちます。
    「単純に参照して使える」という状態を避けるだけなら、一定の効果があるかもしれません。

    リフレクションを使ってしまえば、internal だろうが、private だろうが、使えてしまうので、どの程度のレベルを目指しているのか次第でしょうか。
    (極論としては、どこまでやっても完全にはなり得ない。対策手法とそれを破るのにかかるコストと、守りたいもの重要性次第?)

    コントロールやコンポーネントに対してはライセンス処理というものがあるようですが、どの程度有効に使えるかは存じません。
    http://msdn.microsoft.com/ja-jp/library/fe8b1eh9.aspx


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 山本春海 2010年12月28日 2:16
    2010年12月13日 14:04
    モデレータ

すべての返信

  • InternalsVisibleTo属性にpublickeyを渡すことで対応できそうなのですが、
    対象となるホストが複数ある場合はどうのようにするべきですか。

    複数書けば良いと思いますが、何か支障があるのでしょうか?

    作成したDLL(アセンブリ)を特定のホストからしか使用してほしくない場合、
    単体テストで使用されるInternalsVisibleTo属性を使用するべきですか。

    正直、これの効果に疑問を持ちます。
    「単純に参照して使える」という状態を避けるだけなら、一定の効果があるかもしれません。

    リフレクションを使ってしまえば、internal だろうが、private だろうが、使えてしまうので、どの程度のレベルを目指しているのか次第でしょうか。
    (極論としては、どこまでやっても完全にはなり得ない。対策手法とそれを破るのにかかるコストと、守りたいもの重要性次第?)

    コントロールやコンポーネントに対してはライセンス処理というものがあるようですが、どの程度有効に使えるかは存じません。
    http://msdn.microsoft.com/ja-jp/library/fe8b1eh9.aspx


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 山本春海 2010年12月28日 2:16
    2010年12月13日 14:04
    モデレータ
  • internal による可視性の変更は、簡単に参照できないだけであって、十分な権限があれば呼び出すことはできます。この制限で十分であり、対象となる呼び出し元が列挙できるのであれば、InternalVisibleToAttribute で充分かと思います。(この属性は複数設定できます)

    より強固に実行不可能にしたい場合、SecurityAttribute や Demand() 等を利用して、メソッドのコンパイル時や呼び出し時に権限チェックを行うのが一般的かと思います。

    • 回答としてマーク 山本春海 2010年12月28日 2:16
    2010年12月14日 0:00