-1

同じソリューション内で開発された約 10 個の重要な DLL ファイルで構成されるソリューションがあります。このソリューションをリリースすると、すべての DLL ファイル (内部のパブリック クラスと関数) が開かれ、他のすべてのユーザーが使用できるようになります。同じソリューションでのみ、dll ファイル内のクラスと関数を表示して使用できるようにするにはどうすればよいですか?!

よろしく。

4

2 に答える 2

1

あなたの質問から、どのアセンブリが一緒に出荷されるかを事前に (つまり、コンパイル時に) 知っていると理解しています。

したがって、次の 2 つの解決策があります。

  • いずれかの方法で、型を としてマークし、internalすべてのコードを 1 つのアセンブリにデプロイします。すべてのアセンブリを一緒に出荷しているように見えるので、出荷前にすべてを 1 つのアセンブリに結合しない必然的な理由はありません(ライセンスの問題を除く)
    それができれば、すべてを個別のプロジェクトとして開発し、ビルド ツールを使用して、すべてのコードを含む包括的なプロジェクト ファイルを作成することができます。

  • または、型を作成internalし、ソリューション内の他のアセンブリをフレンドとして宣言します。内部型がソリューション内の別のアセンブリに表示される必要があるアセンブリで を
    宣言します。InternalsVisibleToAttribute

コンパイラに対して「可視」という意味で「可視」を解釈したことに注意してください。そのため、アセンブリを参照する誰かが API に対してコーディングできます。コードが何らかの方法で実際に表示されないようにしたい場合は、CodeCasterのコメントで提案されているように難読化を使用する必要がありますが、それでもおそらく解読不能ではありません。

于 2012-07-03T13:23:48.750 に答える
0

すべてのアセンブリに厳密な名前を付けることができます。次に、パブリックメソッドが呼び出されるか、クラスがインスタンス化されると、呼び出し元のアセンブリを経由Assembly.GetCallingAssembly()して厳密な名前を確認し、一致しない場合は例外をスローできます(ただし、これらすべてのパフォーマンスについてはわかりません)。すべてを1つのアセンブリにまとめて内部にする以外は、現時点で考えられるのはそれだけです。

于 2012-07-03T13:26:48.423 に答える