1

機能を DLL として外部に公開する必要があるが、機能のサブセットのみを公開する必要がある場合 (すべてを公開するため、コア DLL を提供できないことを意味します)、これを行うにはどうすればよいでしょうか?

現時点では、別の DLL でコア ライブラリの一部を再作成する以外に、それを行う方法がまったく見当たりません。

4

3 に答える 3

2

internalFriend Assembly と一緒に使用できます。API は、内部メンバーへのアクセスを許可するコア ライブラリのフレンドになることができます。

詳細については、http://msdn.microsoft.com/en-us/library/0tke9fxk(v= vs.90 ).aspx を参照してください。

これにより、API からのアクセスを許可しながら、コア オブジェクトを内部化したままにすることができます。

コア ライブラリを提供する必要があることに注意してください。何かを使用して .NET アセンブリをマージするか、コードを API ライブラリにコンパイルしない限り、これを回避する方法はありません。

ただし、これは悪い考えだと思います。そのようなエンティティは分離しておく必要があります。最近、複数のライブラリを出荷する際に問題が発生する理由がわかりません。

参考までに - ILMerge を使用すると、.NET アセンブリをマージできます。ここから入手できます - http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

于 2013-02-12T09:51:48.790 に答える
0

コアライブラリを非表示にする目的に依存すると思います。

顧客がコードを呼び出すことを許可したくない場合、たとえば、ライブラリの使用シナリオが壊れる可能性がある場合、または望ましくない動作が発生する可能性がある場合、またはコードの呼び出しを妨げる可能性がある場合は、保護されたクラスを内部にすることができます。 InternalsVisibleToAttribute を使用して Facade アセンブリを含めます。アプリケーションでコア クラスを表示する必要がある場合は、もう 1 つのビルド構成を使用します。

#if PUBLIC_BUILD
    internal 
#else
    public
#endif
    class ProtectedCoreClass

もちろん、クラスが多すぎる場合は、既存のクラスを変更するスクリプトを用意し、Visual Studio の新しいクラス テンプレートを変更する必要があります。

しかし、別のケースとして、非常にユニークなアルゴリズムなどを隠すために、ソース コードが顧客に見られないようにしたい場合があります。次に、コード難読化ツールを調べる必要があります。しかし、コードが逆コンパイルおよび分析されないことを 100% 保証する方法は絶対にありません。それは、クラッカーや競合他社が支払う価格だけです。

ただし、ソース コードを非表示にすることが依然として非常に重要である場合は、サーバー上 (コードに物理的にアクセスできないようにするため) またはクラウドでコードをホストし、公開するアセンブリが呼び出す WCF または Web サービスを提供する必要があります。

于 2013-02-12T11:03:23.283 に答える
0

確かに、コア DLL をラップする新しいプロジェクトを作成し、公開したいメソッドのみを公開するだけで、それぞれが多かれ少なかれコアの「同じ」メソッドへの「パススルー」として機能しますか?

したがって、コアが呼び出された場合Core:)次のようになる可能性があります。

public int Foo()
{
    //blah
}

public int Bar()
{
    /blah
}

のみを公開する場合はFoo、 を参照する新しいプロジェクトを作成しますCore。次のようになります。

using Core;

public class MyApi
{
    private Core _coreInstance.... //some way of reaching Core, in other words

    public int Foo()
    {
        return _coreInstance.Foo();
    }
}

ここで別のアセンブリを作成する利点は、コア機能を 1 つの概念として扱い、それを公に (特定の目的または対象者に) 公開することを別の概念として扱うことです。後の段階で異なる機能を「パブリックに」公開したいと思うかもしれませんが、別の対象者に対しては、 2 つの異なるパブリック API が必要です。そのため、コア アセンブリで何が「パブリック」であったかという概念は潜在的にあいまいになります。

于 2013-02-12T09:51:22.893 に答える