背景:在設計師使用#if指令生成的代碼與Windows窗體條件編譯
我有一個C#Windows窗體應用程序包含一個Windows服務和用於配置系統設置以及通信的接口與服務。
期望的結果:
我想構建解決方案的兩個版本 - 一個客戶版本與所有的Windows服務相關的代碼和表單元素,幷包含一切服務器版本。
該表單包含一個選項卡式控件,其中一個選項卡包含用於使用套接字與Windows服務進行接口的元素。我真正想要實現的是,對於完整構建,包含與服務相關的元素的選項卡被編譯,而對於條件構建,則排除相同的選項卡。
問題:
在這個階段,我用#如果圍繞Windows服務相關的代碼指令。例如:
#if SERVERBUILD
//Code relating to Windows service that I do not want to compile
//for a client version.
#endif
在上述例子中,「SERVERBUILD」對應於構建配置,我可以通過配置管理器中選擇(相對於標準的「推出」構建選項)。
我遇到的問題是,有些代碼我已經把這個包#if指令的周圍在於在標題爲地區WinForm.Designer.cs文件「Windows窗體設計器生成的代碼」。
似乎正在發生的是,當我對某些表單屬性進行更改時,整個代碼區域似乎被刪除並重新生成,從而刪除了我添加的#if部分。
- 我該說這個正確的方法嗎?
- 有沒有辦法避免我失去了我在WinForm.Designer.cs代碼中所做更改的情況?
我真的很感謝任何有條件編譯和這類東西經驗的人的建議。
您能否提供您的代碼的一般概述?什麼地方做了?我懷疑你將GUI從邏輯上解耦出來時存在一個主要問題。 – Femaref 2011-03-14 23:10:26
不是解耦問題,因爲我不想控制GUI元素以外的代碼。我添加了一些關於我想要做什麼的更多細節。 – Span 2011-03-15 00:11:24