2015-04-02 75 views
22

我已經廣泛地尋找解決方案,嘗試了不同的方法,但都沒有工作,因此我在這裏問。NuGet和Git Submodules

我目前的需求是擁有單獨的Git倉庫,每個倉庫都包含一個.Net解決方案文件和相關的項目。其中一個或多個存儲庫僅包含類庫,我需要在其他存儲庫解決方案中使用這些庫。

我的第一個嘗試是使用Git Submodules來避免難看的複製粘貼,並且在開發應用程序時仍然可以使用類庫的源代碼。

所以我的嘗試是包含子模塊,然後在我當前的解決方案中,「添加現有項目」並加載所需的類庫(ies)。

我一直無法克服的巨大問題是Nuget包恢復。引進項目參考圖書館在「.. \包*」,但是當作爲子模塊它們位於一個額外的子文件夾,使他們無法找到所需的依賴進口:

- MySolution.sln 
- Packages folder 
- MyAppProject folder 
- Submodule folder 
-- EXPECTED packages folder for MyLibraryProject that I cannot generate 
-- MyLibraryProject folder 

一個解決方案,我發現並試圖爲this但它有兩個主要問題:

  • 它應該使用的MSBuild包還原工作,我絕對不希望使用它
  • 甚至試圖使用的MSBuild包還原它並沒有在所有的工作,我在我當前的解決方案文件夾中仍然有一個Packages文件夾。也許我做了錯誤,但又一次,我不想使用MsBuild方法。

現在,我真的很想知道是否有解決這個問題的一個清潔的方式,或者,如果我可以做的唯一的事情就是放棄其可用庫的源代碼在我的應用解決方案和上發佈我的圖書館一個私人NuGet飼料並從那裏引用它們。

謝謝。

+1

你有沒有考慮過使用NuGet for MyLibraryProject而不是git submodules?運行一個本地NuGet服務器,爲該庫生成一個NuGet包,並在你的應用程序中添加一個引用。只是一個選項... – 2015-04-13 06:18:08

+0

謝謝你的建議。我確實考慮過這個選擇,但我們正在考慮使用像AppHarbor這樣的在線CI服務,並且這會迫使我們使用公共(付費)nuget服務,例如MyGet,以便能夠從CI服務器,我們希望避免這種情況。 – 2015-04-13 07:32:59

+0

好的。你必須擁有圖書館項目的兩個目錄層次嗎? (子模塊目錄是否只是庫項目目錄本身?) – 2015-04-13 08:05:28

回答

5

聽起來像你的問題是,來自子模塊的項目與其回購解決方案不同的目錄級別。這是一個常見的Nuget問題,因爲它在解決方案級別恢復。 您可以使用此處的修復提示路徑腳本將您的引用替換爲$(SolutionDir),並可能解決問題。 https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/README.md#fixhintpathsps1

+0

我看到有一個乾淨的powershell腳本修復了提示路徑,所以我可以編寫腳本。我會評估這個可能的解決方案,謝謝。 – 2015-04-17 07:35:40

+0

這是否最終爲你工作? – mshish 2015-06-20 02:33:24

+0

雖然這確實是可行的,但我們仍處於決策過程中,儘管看起來像@ jon-skeet建議的那樣,我們將使用Nuget作爲內部依賴項而不是git子模塊。 – 2015-06-20 08:11:20