2015-12-21 50 views
4

我在一個解決方案(除了其他項目)中有兩個庫項目,它們必須共享某些類,但爲了自動更新原因必須保持獨立。在另一個項目/命名空間中使用現有的源代碼

對於共享的類,理想情況下,我希望在兩個庫中都使用相同的class.cs文件,這樣我就不必始終檢查是否通過兩個庫傳播了類的更改。

但是這兩個庫的名稱空間是不同的,所以每個庫中的包含類的文件需要不同的聲明。

我正在使用一個git倉庫,如果有一種技術通過分支/合併操作來完成這項工作。
目前使用VS2013。

我該如何做到這一點?


例子:

library1.dll

namespace library1 
{ 
    public class SharedClass 
    { 
     /// code must match SharedClass in libary2 
    } 
} 

library2.dll

namespace libary2 
{ 
    public class SharedClass 
    { 
     /// code must match SharedClass in library1 
    } 
} 
+0

不清楚你在問什麼 – CodeWizard

+0

爲什麼同一個類屬於兩個不同的命名空間? –

+0

@HamletHakobyan因爲我需要在同一個解決方案中在兩個不同的庫中存在相同的類。我需要能夠單獨更新library.dll文件。 – khargoosh

回答

4

內2個不同的項目聲明SharedClass在一個共同的名字空間,而不是兩個不同的命名空間。您可以將文件鏈接到項目中,而不是物理地包含它。

msdn

從您在Visual Studio中的項目鏈接到一個文件中。在解決方案資源管理器中,右鍵單擊您的項目,然後選擇添加現有項目或者,您可以鍵入Shift + Alt + A。在Add Existing Item對話框中,選擇要添加的文件,然後在Add下拉列表中單擊Add As Link。

namespace Khargoosh.MathLib.Common { public class SharedClass { ... } } 
namespace Khargoosh.MathLib.Library1 { ... } 
namespace Khargoosh.MathLib.Library2 { ... } 

namespace Khargoosh.MathLib   { public class SharedClass { ... } } 
namespace Khargoosh.MathLib.Library1 { ... } 
namespace Khargoosh.MathLib.Library2 { ... } 

處理一個完全其它方式將是使用T4 template一些邏輯來動態創建該文件。

namespace library1 
{ 
<#@ include file="MyCommonClass.cs"#> 
} 

而在其他圖書館

namespace library2 
{ 
<#@ include file="MyCommonClass.cs"#> 
} 

類文件本身不會聲明命名空間。

+0

是的 - 那正是我尋找的東西。 – khargoosh

3

根據您所提供的信息,如果你的共享類是真正的 「常用」 你應該創建這是您的兩個主要庫都可以引用的第三個庫。例如:

MainLib1 (參考commonLib

MainLib2 (參考commonLib

commonLib (包括class.cs和其他常見的代碼)

+0

這些類是真正常見的,但這些文件不能相互依賴,也不能依賴於第三個庫。使用庫A的項目必須能夠刪除/更新庫B,反之亦然。 – khargoosh

+0

MainLib1.dll和MainLib2.dll都不需要commonLib.dll存在嗎?如果是這樣,我將無法更新commonLib.dll,因爲在commonLib.dll更新過程中需要commonLib.dll中存在的類。 – khargoosh

+0

「commonLib」庫允許庫A刪除/更新庫B. – spencerwjensen

3

我需要能夠更新library.dll個文件

然後,您應該使用子模塊完成此任務。

子模塊是同一根下的不同git存儲庫。
這樣你就可以在文件夾級別管理的根本庫

enter image description here

+0

謝謝@codeWizard。這聽起來很不錯。我會對此做更多的研究。 – khargoosh

相關問題