[英]Sharing code between 2 projects without a dll
如何在不創建DLL的情況下在兩個項目之間進行代碼共享?
問題是:我有一個工具可以將用戶和組從LDAP同步到數據庫。
現在該工具是一個Windows服務,但測試它是非常困難和耗時的。
這就是我制作一個控制台應用程序的原因,我可以在其中測試LDAP同步,然后將相應的源代碼文件復制到服務項目中。
但是......保持公共文件同步是一個問題。 我不想制作一個DLL,因為這可能會讓我遇到第3個項目的問題,一個Windows安裝程序(用於服務)我必須使用ExecutingAssembly路徑......
有沒有辦法分享代碼而不需要單獨的dll? Automagic靜態鏈接,這么說呢?
在Visual Studio中右鍵單擊控制台測試應用程序項目 - >選擇添加現有文件 - >在文件添加對話框中導航到實際Windows服務項目中的文件 - >選擇要共享的文件 - >並在添加按鈕上選擇添加作為鏈接選項。
您可以將文件作為鏈接添加到項目中。 在“添加現有項目”對話框中,“添加”按鈕右側有一個下拉列表。 使用此選項“添加為鏈接”:
將文件作為解決方案項,並添加為每個項目的鏈接。
如何手動修改項目文件以指向相同的源文件?
另一種選擇 - 將兩個項目放在同一個文件夾中。 將類添加到一個,然后在另一個項目中添加現有類並指向剛創建的類。
你可以:
總而言之,最好的方法是咬住子彈並將共享代碼存儲在共享程序集(DLL)中。 例如,當您決定通過WCF服務公開此代碼時會發生什么? 它開始變得更加復雜,因為你有3個位置引用相同的代碼文件。 不要只考慮是什么讓你現在的生活變得最簡單,想想將來你的生活(以及其他任何需要維護代碼的人)的生活也會變得更加容易! =)
我將描述用於管理和測試Windows服務項目的設置。 雖然這沒有回答“在沒有DLL的情況下共享代碼”的問題(Unmesh的答案會解決這個問題),但我認為OP可能沒有意識到這對於 DLL 有多么容易。 無論如何,我希望它會幫助某人 。
創建一個解決方案LDAPSync。 在此解決方案中創建三個項目:
LDAPSyncLib是一個DLL項目,包含您的所有業務邏輯和主要功能。
LDAPSyncSvc是一個Windows服務項目,它包含兩個類,一個繼承自ServiceBase的服務控制器類,以及一個服務的Installer類。 該項目具有LDAPSyncLib的“項目引用”。
LDAPSyncTest是GUI應用程序(WinForms,WCF等)或控制台應用程序,具體取決於您的需要。 該項目還具有LDAPSyncLib的“項目引用”。 其唯一目的是提供一些界面,使您可以輕松地將所需的調用進入業務邏輯以進行測試。 在Visual Studio中,將其設置為“StartUp Project”。
現在,當您通過Visual Studio運行調試時,您將獲得一個很好的小GUI或命令窗口,您可以使用它來手動進行測試調用。 當您將其安裝為Windows服務時,LDAPSyncSvc項目的控制器類將接管並處理所有必要的服務請求(啟動,停止,暫停等)
我們有大約30個內部Windows服務項目,我們一直在不斷管理,開發和測試十多年,這個工作流程在快速發現和修復錯誤時證明是非常寶貴的。 祝你的項目好運,我希望這有助於未來的Google員工。
如果要共享功能,則應使用DLL或類似功能。
由於您要共享的是源 ,因此您實際共享的是文件共享。 因此,您可以通過使項目引用外部源代碼來實現,或者您可以讓源代碼管理器為您執行此操作。
如果您使用的是Visual SourceSafe,則可以在兩個文件夾之間建立鏈接。 VSS將確保將它們視為同一文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.