簡體   English   中英

在沒有dll的情況下在2個項目之間共享代碼

[英]Sharing code between 2 projects without a dll

如何在不創建DLL的情況下在兩個項目之間進行代碼共享?

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

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

這就是我制作一個控制台應用程序的原因,我可以在其中測試LDAP同步,然后將相應的源代碼文件復制到服務項目中。

但是......保持公共文件同步是一個問題。 我不想制作一個DLL,因為這可能會讓我遇到第3個項目的問題,一個Windows安裝程序(用於服務)我必須使用ExecutingAssembly路徑......

有沒有辦法分享代碼而不需要單獨的dll? Automagic靜態鏈接,這么說呢?

如何將文件添加為鏈接。

在Visual Studio中右鍵單擊控制台測試應用程序項目 - >選擇添加現有文件 - >在文件添加對話框中導航到實際Windows服務項目中的文件 - >選擇要共享的文件 - >並在添加按鈕上選擇添加作為鏈接選項。

您可以將文件作為鏈接添加到項目中。 在“添加現有項目”對話框中,“添加”按鈕右側有一個下拉列表。 使用此選項“添加為鏈接”:

替代文字

將文件作為解決方案項,並添加為每個項目的鏈接。

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

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

你可以:

  • 將共享代碼保存在生成DLL的單獨項目中,然后使用ILMerge等工具將DLL和EXE轉換為一個程序集。
  • 通過調整項目文件或使用源樹布局做一些時髦的事情來共享多個項目之間的源文件。

總而言之,最好的方法是咬住子彈並將共享代碼存儲在共享程序集(DLL)中。 例如,當您決定通過WCF服務公開此代碼時會發生什么? 它開始變得更加復雜,因為你有3個位置引用相同的代碼文件。 不要只考慮是什么讓你現在的生活變得最簡單,想想將來你的生活(以及其他任何需要維護代碼的人)的生活也會變得更加容易! =)

Necromancing - 根據Visual Studio 2017

您可以創建共享項目,然后在另一個項目中引用共享項目。

它將使用您引用共享項目的項目中的框架版本和庫。 如果沒有沖突,您還可以在多個項目中使用相同的共享項目。

這基本上是源代碼級別的靜態鏈接。
這也適用於HTML和JavaScript文件(特別是,它適用於發布),但對於HTML和JS文件,您將在調試時遇到問題...

它位於“經典Windows桌面”下,但您也可以將它用於.NET Core等。

在此輸入圖像描述

我將描述用於管理和測試Windows服務項目的設置。 雖然這沒有回答“在沒有DLL的情況下共享代碼”的問題(Unmesh的答案會解決這個問題),但我認為OP可能沒有意識到這對於 DLL 多么容易。 無論如何,我希望它會幫助某人


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

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM