私の会社には、非常に大きなサイズのDLL(約11 MB)を持つソフトウェア製品があり、DLLの2つまたは3つのバージョンを各DLLのメソッドのリストのみに許可することによって、サイズを縮小するタスクが割り当てられています。現在のDLLにはすべてのメソッドがありますが、ほとんどのクライアントは業界に応じて特定のメソッドセットしか使用しません。条件付きアクセス修飾子?
私はそれに7つのプロジェクトがあります:2つはC++プロジェクトであり、5つはC#です。 2つのC#プロジェクトでは、C++プロジェクトの関数を(dllexportを使用して)呼び出すので、アンマネージコードと呼ばれていると思います(この分野の初心者ですので、私にはあまり知られていません。
これまで、 "#if"で使用するソリューション全体のプリプロセッサ定数を定義する方法を理解しました。これは、「public/private/protected/etc」が「アクセス修飾子」と呼ばれています。たとえば、次のようなものが.csファイルのファイルの一つである
:
#if DLL_FOR_INDUSTRY_A
public void method_A(int arg1)
#else
private void method_A(int arg1)
#endif
{
for (int x=0; x<arg1; x++)
{
// code here;
}
}
#if DLL_FOR_INDUSTRY_B
public void method_B(int arg1)
#else
private void method_B(int arg1)
#endif
{
// code here;
}
#if DLL_FOR_INDUSTRY_C
public void method_C(int arg1)
#else
private void method_C(int arg1)
#endif
{
// code here;
}
しかし、私の問題は、私は周りに400を持っていることをこれまでのところ、私は3つのDLLを作成するには、次が出ています+ DLL全体の+メソッド!いくつかのメソッドは、私が作成するはずの新しいDLLの間で一般的になります。新しいDLLのうち2つはソフトウェア版を表します(「標準」vs「プロフェッショナル」版と見なします)。「[System.Diagnostics.Conditional]」も使用しましたが、メソッドが"public void method_A(int x)" "public method_A(int x)"ではなく、public method_A(int x)となります。もし私が既存のメソッドに "void"を追加すると、それは他の多くの呼び出しを悪化させます(悪夢!)さらに、私はこの分野の専門家ではないので、どちらの方が良い方法かも知りません。
私の質問 - どのように私はこれを正しく行う必要がありますか誰にも良い提案がありますか? DLLの結果を変更するためにプリプロセッサ定数を設定できるように、誰かが私にそのような大きなDLLを「条件付きで」コンパイルする方法について正しい方向に向けることができればさらに良いでしょう。 (私は上に示したものをコンパイルしようとしました(400+の代わりに約15のメソッドしか扱わなかった、その多くの作業)が、DLLのサイズは変更されていないようでした。未使用のメソッドがまだ新しいDLL 。)
アクセシビリティーは簡単に "条件付き"にすることができますか? (出力DLLに表示されないように)
助けてください!私はWindows 7上でVisual Studio 2015を使用しています& Windows 10 私はある方向を与えることができる人に心から感謝しています。私は週末を含む過去5日間これにいましたが、まだ良い解決策はありません。 :-(
'public method_A(int x)'は単なる「メソッド」ではありません。それはコンストラクタです。 – Abion47
ものをプライベートにするとDLLのサイズが小さくなりますか? –
なぜ継承を使用しないのですか?あなたは間違いなく "クライアント== x ...他の場合はクライアント== y ..."のようなことをしたくないと思います - 私はどこかでそれをやったところで、維持するのは恐ろしい*でした。 – EJoshuaS