2

多くの中で、私は多くのプロジェクトの下にある .NET ソリューションを持っています。

問題はこれです:

プロジェクトで数行のコードを繰り返し使用しています。コピペみたいなもので、本当に嫌です..

私の考えは、これらすべてのコードを別のヘルパー クラスに移動することですが、次の質問がこの考えを妨げています。

セキュリティの側面 --> このコードをプロジェクトから移動しても、誰かがまだアクセスできることを意味します。それが私のプロジェクトにあった場合、関連する機能を「プライベート」にすることでセキュリティを提供できます。

それで、問題はコードの繰り返しを避ける方法ですが、同時にそれを安全に行う方法ですか?

私の懸念を説明するためのいくつかのコード:

プロジェクト A (ソリューション S)

private Foo SomeSecureCode(IMyInterface interfaceObject)
{
     //Same some lines of code
}

プロジェクト B (ソリューション S)

private Foo SomeSecureCode(IMyInterface interfaceObject)
{
    //Same some lines of code as above
}

代わりに、この関数をヘルパー クラスに移動しますが、どのように安全に作成しますか?

(マイナーな詳細: VS 2010 で .NET バージョン 4 を使用しています)

4

3 に答える 3

3

これは解決策になる可能性があります:

  • クラスをプロジェクト A から別のプロジェクト (B) に移動し、クラスを内部化する
  • クラスを使用したくないプロジェクトに sn.exe で署名し、プロジェクトのプロパティでプロジェクトに署名します。
  • プロジェクト B で、これをプロジェクト B の Properties フォルダーの下にある AssemblyInfo に追加します。

    [assembly: InternalsVisibleTo("Full.Assembly.Name.Here, PublicKey="ここでプロジェクト A の公開鍵を切り取って貼り付ける>")]

これで、プロジェクト A と B でのみ使用できます。

プロジェクトに署名するには:

  • sn.exe を実行します。
  • Sn.exe sn.key の結果を呼び出す
  • プロジェクトに sn.key を追加します
  • 署名したいプロジェクトのプロパティを開きます (Alt+Enter)
  • タブ「署名」に移動します
  • 「アセンブリに署名する」チェックボックスをオンにします
  • コンボボックスで厳密な名前のキーを選択します
  • プロジェクトをコンパイルする

プロジェクトが署名されたので、内部クラスを持つプロジェクトの AssemblyInfo に InternalsVisibleTo 属性を追加することで、他のプロジェクトで内部を表示できるようになります。

于 2013-08-31T16:55:25.913 に答える
1

継承を使用して、「ヘルパー」クラスをそれを必要とするクラスのベースにすることはできますか?

sealed class A : C { }
sealed class B : C { } 
abstract class C { 
    protected Foo SomeSecureCode(IMyInterface interfaceObject); 
} 

オブジェクト構成と内部クラスも使用できます。

1 つのアセンブリで:

class A { 
private Helper _helper; 
  private Foo SomeSecureCode(IMyInterface interfaceObject) { 
    return _helper.SomeSecureCode(interfaceObject); 
  }
}

そして別のアセンブリで:

internal class Helper { 
  public Foo SomeSecureCode(IMyInterface interfaceObject) { 
    // your code here
  }
}

次に、含まれているアセンブリで Assembly InternalsVisibleTo属性を使用しHelperて、参照する必要があるアセンブリがHelperアクセスできるようにします。

また、アセンブリを使用する人は誰でも、Reflection API を使用してプライベート メソッドにアクセスして呼び出すことができることに注意してください。dotpeek などのツールを使用すると、ほんの少しの情報が失われるだけでコードを見ることができます。

于 2013-08-31T16:53:49.910 に答える
1

多分これは正しい方向を指しています:

InternalsVisibleToAttribute: 通常は現在のアセンブリ内でのみ表示される型が、指定されたアセンブリで表示されることを指定します。

于 2013-08-31T16:49:15.110 に答える