2011-06-21 16 views
1


私はいくつかの機能を実行することを私の顧客のためにいくつかのC#のDLLを用意しました。
同じdllも使用しています。
私は彼に利用可能ないくつかの方法と私に利用可能なすべての方法を作ることができます。
おかげで、
dllメソッドへのアクセス

答えて

5

は、単に二つのプロジェクトをコンパイルし、共有コードベース

を使用してください。 1つには、顧客に提供するDLLのソースが含まれ、もう1つにはすべてのソースが含まれています。

  • 利点:彼らはあなた自身のために残しておきたいソースのどれを見ていない、とあなたは特別なホスティングの任意の並べ替えを設定する必要はありません - ちょうどそれらにDLLを送信
  • 短所:あなたがしなければなりませんコードベースをフォーク可能にするための余分な作業。このようなリファクタリングを行うには、大きな開発投資が必要かもしれません。

は、彼らがアクセスを許可されているコードにアクセスするために、顧客のためのWebサービスを提供するWebサービス

を提供します。

  • 利点:ソースがまったく表示されません。
  • 短所:コードによっては、セキュリティを最大限に高めるために多くの作業が必要になることがあり、パフォーマンスを上げることができない可能性があります。おそらくこれらは大きな懸念ではないので、簡単かもしれません。また、これを機能させるために専用ホスティングを設定する必要があります。

マークを使用すると、DLL

  • コードが共有DLLに署名使用し、独自のコードに署名internal
  • コードを使用するこれらのメソッド

    1. 共有DLLでInternalsVisibleTo属性を使用します
    2. 共有DLLに[assembly: InternalsVisibleTo]を追加

    参照:http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

    • 利点:クライアントはリフレクターを経由して、完全なソースコードにアクセスする必要があります:これは
    • デメリットをコーディングする非常に簡単なソリューションです。コードを難読化するか、コードをリバースエンジニアリングすることを合法的に禁じるライセンス契約を設定することで、これを軽減できます。
  • +1

    +1を(あなたのアセンブリに署名したくないと仮定)

    はSO – stijn

    +0

    グレート答えのパワーに位置しています。私はそれが最も簡単だと思うので、私は 'InternalsVisibleTo'を選択します。ありがとう – Igal

    0

    あなたは同じコードベースからのライブラリの2つのバージョンをコンパイルする#defineようC# preprocessor directivesを使用することができます。

    お客様のお客様に1つのバージョンを出荷し、他のバージョンはご自身で保管してください。

    1

    アセンブリの2つのバージョンをコンパイルする必要があります。あなたがあなたのcutomerに配布するバージョンは、あなたがアクセスしたくないメソッドを完全に除外する必要があります。そうしないと、メソッドを隠す方法にかかわらず、Reflectionからアクセスできます。これらのような答えに

    +0

    あなたは何もしていません:)企業はしばしばライセンス契約によってこの問題を論争することができます。 –

    +0

    もちろん、顧客が私たちのコードを見ることができても、あまりにも多くの状況に遭遇しました。 –

    関連する問題