2010-12-02 136 views
20

如何在不製作dll的情況下在兩個項目之間共享代碼?在沒有dll的2個項目之間共享代碼

問題是:我有一個工具可以將LDAP中的用戶組&同步到數據庫。

現在該工具是一個Windows服務,但測試它是非常困難和耗時的。

這就是爲什麼我做了一個控制檯應用程序,我可以測試LDAP同步,然後將相應的源代碼文件複製到服務項目中。

但是...保持共同文件同步是有點問題。 我不想做一個DLL,因爲這可能與 創建我一個問題,第三個項目,一個Windows Installer(用於服務),我必須使用ExecutingAssembly路徑...

是否有辦法共享代碼而不用單獨創建一個dll? Automagic靜態鏈接,可以這麼說嗎?

+0

在Vista和更新的符號鏈接可能會有用。 – CodesInChaos 2010-12-02 15:27:01

+0

@CodeInChaos,無法輕鬆地在源代碼管理/備份中存儲符號鏈接 - 你正在做這兩個,對吧? =) – Rob 2010-12-02 15:30:35

+0

http://stackoverflow.com/questions/954560/what-does-git-do-to-files-that-are-a-symbolic-link聽起來像git存儲sym-links作爲sym-links。不知道它是否適用於Windows,因爲我還沒有使用vista。根據使用情況,將sym-link添加到忽略文件併爲每個編碼器手動創建足夠了。有點駭人聽聞,但應該工作。 – CodesInChaos 2010-12-02 15:51:55

回答

29

How about adding a file as a link.

在Visual Studio中右鍵點擊您的控制檯測試應用程序項目 - >選擇添加現有文件 - >文件對話框導航添加到文件在您的實際Windows服務項目 - >選擇你想分享的文件 - >和添加按鈕選擇添加爲鏈接選項。

2

如何修改項目文件以指向相同的源文件?

另一種選擇 - 將兩個項目放在同一個文件夾中。向一個類添加一個類,然後在另一個項目中添加現有的類並指向剛剛創建的類。

2

你可以:

  • 保持在一個單獨的項目,該項目產生DLL共享代碼,然後使用工具如ILMerge打開DLL & EXE成一個組件。
  • 在多個項目之間共享源文件,可以通過修改項目文件或使用源代碼樹佈局來做一些有趣的事情。

所有這一切說,最好的方法是咬住子彈並將共享代碼存儲在共享程序集(DLL)中。例如,當您決定通過WCF服務公開此代碼時會發生什麼?它開始變得更復雜,然後你有3個地方引用相同的代碼文件。不要只想着現在什麼讓你的生活變得最簡單,想一想什麼會讓你的生活(以及其他任何維護代碼的人)在未來變得更加輕鬆! =)

9

您可以將文件作爲鏈接添加到項目中。在Add Existing Item對話框中,Add按鈕右側有一個下拉菜單。使用此選擇「添加爲鏈接」:

alt text

把文件作爲一個解決方案項目,並添加爲紐帶,以每個項目。

0

如果你想分享功能,你應該使用DLL或類似軟件。

由於你想分享的是來源,你實質上共享的是文件共享。所以你可以通過讓你的項目引用外部來源來做到這一點,或者你可以讓你的源代碼控制爲你做這個。

如果您使用Visual SourceSafe,則可以在兩個文件夾之間建立鏈接。 VSS將確保它們被視爲相同的文件。

0

我將描述我們用來管理和測試Windows服務項目的設置。雖然這並沒有回答「沒有DLL共享代碼」的問題(Unmesh的回答需要注意這一點),但我認爲OP可能不知道這是多麼容易,這是一個DLL。無論如何,我希望它會幫助某人


創建解決方案LDAPSync。在這個解決方案中創建三個項目:

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

LDAPSyncLib是包含所有的業務邏輯和主要功能的DLL項目。

LDAPSyncSvc是一個Windows服務項目包含兩個班,一個服務控制器類,從ServiceBase繼承和類爲您服務。該項目具有LDAPSyncLib的「項目參考」。

LDAPSyncTest是一個GUI應用程序(WinForms,WCF等)或控制檯應用程序,根據您的需要。該項目還具有LDAPSyncLib的「項目參考」。它的唯一目的是提供一些界面,使您可以輕鬆地將所需的調用用於測試目的的業務邏輯。在Visual Studio中,將其設置爲「StartUp Project」。

現在,當您通過Visual Studio進行調試時,您將得到一個很好的GUI或命令窗口,您可以使用它來手動進行測試調用。當您將其安裝爲Windows服務時,LDAPSyncSvc項目的控制器類將接管並處理所有必要的服務請求(啓動,停止,暫停等)。

我們有大約30個內部Windows服務項目,我們一直在不斷管理,開發和測試十多年,這一工作流程已經證明在發現和修復錯誤時非常寶貴。祝你的項目好運,我希望這有助於未來的Google員工。