2010-12-13 20 views
0

假設您有兩個完全獨立的項目:Project 1和Project 2.一個是Windows應用程序,另一個是Web應用程序。內部方法代碼重用

如果這兩個項目需要類A,B和C爲自己內部使用,什麼是在這兩個項目之間的類促進代碼重用的最佳方式(尤其是作爲代碼隨時間更新)?

  • 部隊類是公共的,打破整齊公共接口,並從一個項目一個參考其他(呸!)
  • 創建的共享組件的第三個項目,然後僅在內部使用它們對於主要項目(yuck!)
  • 將項目1中的類「添加」到項目2(超出項目文件夾)並接受項目2將不具有需要在其項目文件夾中構建的所有類(可接受,但並不理想)
  • 取決於複製粘貼,源代碼控制交叉引用或其他非編程特技。
  • 多數民衆贊成躲避我此刻的其他技術(手指交叉...)

注意,這些是相同的,內部的,輔助類所必需的兩個項目。

回答

5

您可以使用InternalsVisibleTo assembly attribute的朋友組件,使組件訪問類型和成員在另一個組件中標記爲internal

+0

哇。我從來沒有聽說過這個,但它看起來只是我需要的東西。你每天都會學到一些東西! – Flipster 2010-12-13 06:05:56

+0

太棒了。這很好,而且比我預期的更容易。 +1並被接受。謝謝,約翰! – Flipster 2010-12-13 06:17:32

4

通常,它是通過使用類庫項目實現的,您需要第三個項目(它是類庫類型)。

類庫項目具有.dll擴展名的輸出,可供任何其他.NET項目(使用任何語言編寫)使用。使用DLL,添加引用該文件,並把

using the_namespace_of_dll

這是絕對解決

1

我通常使用一個單獨的解決方案(完成測試)並添加一個引用。然後我在末尾使用ILMerge來不公開一個單獨的DLL(到目前爲止,這對我來說工作得很好)。 John Rasch指出的方法可以聯合使用,以防止「暴露」它,儘管我通常在信任用戶/其他開發人員方面犯了錯誤。

我避免複製'粘貼在幾乎所有的費用。供應鏈管理方法可以發揮作用,但並不真正迫使開發ABI,並且在不同的供應鏈管理中得不到很好的支持。沒有幫助的SVN是非常糟糕的,除非一種解決方案是「業主」;那麼外部就可以馬馬虎虎了。

0

的代碼添加到一個項目,add it to the other as a link。那麼你不必擔心「InternalsVisibleTo」 - 它就在那裏。這兩個項目的代碼是相同的文件(或者你喜歡的許多項目)。

不要害怕編輯XML .cs​​proj文件。舉例來說,這個工程......

<Compile Include="$(Codez)\z.Libraries\diff-match-patch\DiffMatchPatch\**\*.cs" 
Exclude="NotThisOne.cs;**\NotThisFolderWith\This*.cs"> 
<Link>Libs\%(RecursiveDir)%(Filename)%(Extension)</Link> 
</Compile> 

...會給你一個名爲\Libs\文件夾下你的目標項目都從源文件夾中的C#文件,和子文件夾,如鏈接文件。

  • $(Codez)是我在PC上使用的Windows環境變量。
  • 我也可以在最後使用*.*而不是*.cs
  • 這是Visual Studio可能會破壞的那些東西之一,將文件添加到裝滿通配符鏈接文件的文件夾中可能會將它們分解爲單獨的條目。或不。取決於風。