我的公司有一個具有非常大的DLL(大約11 MB)的軟件產品,我已經分配了任務來減小其大小,方法是讓兩個或三個版本的DLL只允許在每個DLL中提供方法列表。當前的DLL有各種方法,但大多數客戶只使用某些方法取決於他們的行業。有條件訪問修飾符?
我有7個項目的溶液在它:兩個是C++的項目,和五個是C#。其中兩個C#項目調用C++項目的函數(使用dllexport),我認爲它被稱爲非託管代碼(請耐心等待,我是這個領域的新手,所以我不太瞭解這個術語 - 事實上我現在只是發現「public/private/protected/etc」被稱爲「訪問修飾符」!:-))
到目前爲止,我已經想出瞭如何定義與「#if」一起使用的解決方案範圍的預處理器常量。到目前爲止,我想出了下面創建三個DLL:
例如,類似下面是在的.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 +方法在整個DLL中!有些方法在我應該創建的新DLL中很常見。其中兩個新DLL將代表軟件版本(將其視爲「標準版」與「專業版」版本)。我還着眼於使用「[System.Diagnostics.Conditional]」,但如果方法是「public method_A(int x)」而不是類似「public void method_A(int x)」。如果我在現有方法中添加「void」,它會打破許多其他調用(噩夢!)另外,我不是這個領域的專家,所以我不知道哪種方法是更好的方法。
我question-沒有任何人有關於如何我應適當做這個更好的建議?更好的是,如果有人能夠指出我如何正確指導這樣的大型DLL可以「有條件」編譯,以便我可以設置預處理器常量來更改DLL結果。 (我試着編譯我上面展示的內容(只覆蓋了15個方法而不是400+,它的很多工作),但是DLL大小似乎沒有改變,不確定未使用的方法是否仍然被編譯到新的DLL中)
可以使訪問修飾符以更簡單的方式「有條件」嗎? (以便它們不會出現在輸出DLL中。)
請幫忙!我在Windows 7上使用Visual Studio 2015 & Windows 10. 對於任何能夠給我方向的人表示誠摯的感謝,在過去的5天裏,包括週末在內,我一直在這裏,但我沒有很好的解決方案。 :-(
'public method_A(int x)'不僅僅是「一種方法」。它是一個構造函數。 – Abion47
會使私人東西減少DLL的大小? –
爲什麼不使用繼承?你絕對不想做像「如果client == x ... else if client == y ...」的東西 - 我曾在某個地方工作過,而且它很糟糕。 – EJoshuaS