我知道C#預處理器通常會消除預編譯的符號。規則是否可以被打破一點?是否有可能在C#程序集中保留用於引用程序的預編譯符號?
例如,我有一個C#DLL 甲,我想在另一個C#程序乙使用。在B我有不同的預編譯符號X,Y,Z。如果定義了X,我需要版本A。否則,如果Y被定義,我需要另一個版本的A。和Z類似。爲了實現這一點,我想寫預編譯指令中一個的源代碼,像
public static class MyClass
{
public static void MyMethod()
{
#if X
DoX();
#elif Y
DoY();
#elif Z
DoZ();
#else
DoWhatever();
#endif
}
}
我希望這些條件中一個不會消失的編譯和乙可以使用他們。可能嗎?或者我該怎麼做才能解決這個問題?
在此先感謝。
編輯
一些背景信息。 B是Unity3D遊戲,A是我們希望在不同遊戲中使用的常用庫。所以兩個A和B依靠程序集UnityEngine.dll。然後有由U3D定義的各種預編譯符號來表示當前構建平臺,引擎版本等,我想在A和B中使用這些符號。
您打算購買3份A.dll嗎? A.X.dll,A.Y.dll和A.Z.dll? –
像'#if'這樣的指令是用於條件編譯的。如果您希望* A *的行爲與其他程序中建立的條件不同,而不重新編譯* A *,那麼'#if'對於工作來說就是錯誤的工具。你有沒有考慮過像[工廠方法模式](https://en.wikipedia.org/wiki/Factory_method_pattern)呢? –
@ScottChamberlain我希望不會。如果我這樣做,我不能讓_B_選擇使用哪個_A_,可以嗎? –