2015-07-02 70 views
0

我有一個庫項目在多個應用程序中使用。我們稱之爲Library1。 Library1具有自己的NuGet包依賴項。當我使用Library1設置項目ProjectA時,它爲Library1依賴的每個.dll指定了一個HintPath。假設這個HintPath是「.. \ etc.dll」。C#庫項目在多個項目中使用

我現在有依賴Library1的Library2和依賴於Library2(和Library1)的ProjectB。我有這樣一個層次結構:

ProjectB 
--Library2 
----Library1 

但是其他項目採用分享幫助直接,就像這樣:

ProjectA 
--Library1 

打開任一項目B時,包被在「項目B \包」解決,這是從庫中取決於它的兩個文件夾,這意味着它應該在HintPath中指定的「.... \ etc.dll」而不是「.. \ etc.dll」中查找。

有沒有一種方法,我可以指定一個HintPath取決於父項目,或任何種類的解決方法,這將允許此工作,而不必手動更改我的每個.dll參考路徑?也許我可以添加到父項目的文件?

+0

在我看來,我只是在項目的一個「lib」文件夾中區分所有外部庫。我可能不會嘗試重新創建相關庫的依賴關係。例如,ProjectA在「lib」文件夾中引用了「Library1.dll」,而ProjectB對「Library2.dll」有引用,但在依賴項的「lib」文件夾中也有「Library1.dll」。 – Zeal

+0

@Zeal我的「Library2」和「Library1」是git子模塊。他們是項目,雖然我可以使用.dll,但我們需要經常更新它們。 – snotyak

回答

1

您可以創建一個NuGet.Config文件來指定repositoryPath,它允許您覆蓋將NuGet包下載到項目的默認位置。

<configuration> 
    <config> 
    <add key="repositorypath" value="Packages" /> 
    </config> 
</configuration> 

repositoryPath相對於NuGet.Config文件的目錄。

NuGet會根據您打開的解決方案來查找此文件,因此您需要將其放置以便解決方案的一個或全部使用此文件。一個簡單的方法是將它放在兩個解決方案的父目錄中,但可以爲每個解決方案或僅添加一個。

如果解決方案位於c:\ a \ b \ c那麼NuGet將按照指定的順序在這些位置查找文件,最後會回退到用戶配置文件中的文件。

  1. C:\ A \ B \ c.nuget \ nuget.config
  2. C:\ A \ B \ C \ nuget.config
  3. C:\ A \ B \ nuget.config
  4. C:\ A \ nuget.config
  5. C:\ nuget.config

設置此功能之後,你可能需要重新安裝的NuGet包,以便正確hintPaths被添加到您的項目。

+0

儘管這對父項目(其中.sln所在的位置)有效,但內部庫項目依賴項不會使用此nuget.config創建它們自己的「Packages」文件夾。我正在尋找的是一種在不同的項目中使用我的庫項目的方法,它們具有不同的結構,並且仍然可以正確地使用它們的包引用。理想情況下,我可以爲庫的文件夾中的庫的.csproj設置一個單獨的位置,並將其包下載到那裏,因此無論使用它的項目如何,hintpath都可以工作。那有意義嗎? – snotyak

+0

您無法爲每個項目分別創建一個軟件包目錄。 NuGet的軟件包目錄基於解決方案的目錄。除非切換到新的.xproj和project.json樣式項目,它們根本不存儲提示路徑,但僅在Visual Studio中受支持。要保留原始提示路徑,您必須有一些工具或腳本可以正確地爲每個具有其獨特軟件包目錄的項目正確恢復軟件包,並且您還需要僅在正確的父解決方案中更新項目的NuGet軟件包。 –

+0

這是有道理的。有沒有一種方法可以讓所有項目在用戶的主目錄中使用一個文件夾,而不是使其成爲相對的?我無法讓環境變量在nuget.config文件中工作。 – snotyak

相關問題