2012-12-28 157 views
6

這可能是之前發佈的,但我不確定要查找哪些搜索條件!Visual Studio:如何管理項目之間共享的代碼

快速說明。

我有幾個項目之間共享的代碼。此代碼本身仍在進行中。問題是,無論什麼時候我需要更新這段代碼,我不想再做3次,這將成爲一場噩夢。

有沒有辦法將它添加到項目中,沒有將其複製到項目文件夾? 即我想要共享類被掛到我的3個項目,

C:\代碼庫\ sharedclass.cs NOT \ eachproject \ BIN \ sharedclass.cs

我一定要創建它,因爲它是自己的圖書館項目?如果編譯器可以將它編譯爲「外部」代碼,那將會好得多。

乾杯。

+0

你的意思是像Visual Studio中的「添加文件作爲鏈接」選項? http://support.microsoft.com/kb/306234(編輯:這是假設你根本不想使用共享項目?) –

+1

只需在解決方案中包含不同的項目並添加一個引用該項目,而不是編譯的.dll。我們的源代碼庫有一個包含共享代碼的文件夾(主要是類庫項目),我們在樹的完全不同的區域引用來自解決方案的那些項目。難點在於弄清楚如何在源代碼控制中安排代碼,以便爲您的團隊做出這樣的直覺。 (並且沒有「正確」的方法來實現它,你如何設置它取決於很多因素,它可能需要一些時間才能正確地規劃出來。) – David

+0

http://msdn.microsoft.com/en-us /library/1xhzskbe.aspx – 2012-12-28 14:24:01

回答

-1

這是更好地共同的部分提取到一個單獨的項目庫,並添加到所有的解決方案/依賴項目該項目的參考。

否則,您可以Add code/file/item as Link

+0

添加爲鏈接在此特定實例中效果最佳。 –

+2

鏈接已損壞。 – benderto

5

是的。

您可以從任何地方您的硬盤驅動器上添加了一個項目,一個解決方案。因此,將共享代碼放入類庫中並將其添加到您的三個項目中。

+0

這也是我如何做的東西。我有一個通用工具庫,其中包含我在幾乎任何代碼部分中使用的很多有用的東西,所以我將該項目添加到我正在處理的其他任何項目中。當您在那裏修改代碼時,將在使用此項目的任何其他應用程序中對其進行修改。當你需要發佈的時候,有時候從DLL中獲取工作並將其保存爲「正確的版本」是一個好主意,因爲有時當你在其他程序中工作一段時間時,可能會破壞事情的運行方式並因此而中斷舊節目。如果你保持DLL的發佈,它使事情變得更簡單。 – Joe

2

微軟一直支持它已內置到VS現在的一個開源項目,其所謂的NuGet,可以輸出共享項目作爲的NuGet文件,並使用它在你的其他項目。

它實際上將部署所有你在構建包指定的文件。

這就是.Net現在如何支持依賴關係。你會注意到,即使像EF這樣的東西來自NuGet包。你甚至可以在MyGet.org這樣的地方免費託管它,我使用它並且工作得很好。

http://nuget.org/

0

是,把需要在一個單獨的類庫項目中共享,構建它,並引用此創建的DLL建設成爲你的其他項目的代碼。

6

正如其他人所說的,只需在解決方案資源管理器中右鍵單擊解決方案,選擇添加>現有項目,然後瀏覽到常用項目.csproj文件,並將其從原始位置包含在解決方案中。

有兩個問題但它可能會或可能不會是一個問題,這取決於你的團隊規模:

1 - 常見的項目將包括在具有相對路徑的每個解決方案,該解決方案文件(IE:... \ CommonProject \ Common.csproj)。這意味着所有開發人員必須具有相同的工作文件結構,否則當他們嘗試打開主項目時會出錯。

2 - 在該方案中有共同的項目是由多個項目引用(說兩句 - A和B)和開發項目的工作必須作出修改,以共同的項目作爲自己的任務的一部分。開發人員無法知道他們所做的更改是否會破壞項目B,而不會實際檢出項目B並編譯它。隨着越來越多的項目引用共同項目,這種情況的風險會增加到難以管理的程度。

同樣,其他的都表示,沒有「正確」的方式做到這一點,但是我採取的方法如下:

1 - 使用持續集成,如巡航控制管理建設項目,並將通用項目作爲獨立項目放在服務器上。

2 - 創建您的源代碼控制到房子下的目錄內置常見的DLL。在構建機器上籤出此目錄,並且每當公共項目生成時,它將輸出DLL複製到DLL文件夾中,並將這些更改提交到源代碼管理。

3 - 所有開發人員的機器和構建服務器來控制公共DLL文件夾的位置和DLL的使用變量,而不是硬編碼路徑參考使用環境變量。 (IE:而不是C:\ Source \ MyCommonProjectDLLS \ Common.dll使用$(MyCommonLocation)\ Common.dll並將變量MyCommonLocation設置爲C:\ Source \ MyCommonProjectDLLS)

4 - 對於任何引用常見的DLL,在生成服務器上爲該項目設置一個CI觸發器來觀察常見的DLL文件夾。無論何時對其進行更改,構建服務器都應該構建所有正在使用的項目。

這立即讓你知道,如果你犯下任何其他項目的重大更改。唯一的缺點是,在這個模型中,消耗項目一旦產生就會迫使更新通用DLL。另一種方法是從源代碼管理版本生成Common DLL時對其進行版本化,並將每個版本放在常用DLL文件夾下的其自己的子目錄中。所以,你最終會得到:

常見的DLL
-1.0.0.1234
-1.0.0.1235
-1.0.0.1236

等。這樣做的好處是,每個項目都可以通過簡單地引用新版本的代碼來選擇何時更新公共DLL。然而,這樣做會削弱兩種方式,因爲這可能意味着某些項目的舊版本的通用代碼會比他們應該做的時間更長,這可能會在最終引入這些更改時增加所涉及的工作。

希望這會有所幫助。

+0

感謝提示,我遇到了上述問題,您的回答非常有幫助! – QtRoS

0

我用git submodules實現這一目標。

  1. 爲您想在解決方案之間共享的每個模塊(項目)創建一個新的git存儲庫。我通常還在單獨的項目中包含該項目的單元測試,但在同一個git存儲庫中。
  2. submodule添加到將使用共享代碼的解決方案的git存儲庫中。添加子模塊會創建指向外部存儲庫特定提交的鏈接。當子模塊中的代碼更新時,您將能夠將更新提供給您的父解決方案,這與更新對子模塊提交的引用基本相同。我發現使用像SourceTree這樣的應用程序,該過程更容易可視化。
  3. 添加子模塊並拖動最新提交將在父解決方案文件夾內創建共享項目的副本。通過右鍵單擊解決方案並選擇「添加現有項目」,將項目導入父級Visual Studio解決方案。
  4. 通過右鍵單擊項目並選擇「添加引用」並在「解決方案」選項卡中查找共享項目,在其他項目中添加對共享項目的引用。

既然共享項目包含在解決方案中,您將能夠將更改推送到子模塊,並將這些更改自動合併到解決方案中。您還將能夠看到引用該子模塊的其他git存儲庫中的更改。

相關問題