2

我正在使用Visual Studio 2017中的Xamarin.Forms PCL移動應用程序,使用project.json進行軟件包管理(我沒有使用PackageReference,因爲Visual Studio 2017是必需的並且我們的一些團隊仍在使用Visual Studio 2015)。我有解決方案內的多個項目,和我有項目的多個分支,像這樣:NuGet軟件包安裝到錯誤的文件夾

MobileApp/ 
    packages/ <<--- (I want nuget packages to be installed here) 
    Branches/ 
     DevBranchSolution/ 
      MobileApp.sln 
      nuget.config 
      ProjectA/ 
      ProjectB/ 

我想我所有的(項目/解決方案/分支機構),以便能夠從一個位置參考包,所以您會注意到我在MobileApp文件夾的根級別添加了packages文件夾。我有每個解決方案,看起來像一個nuget.config文件:

nuget.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <config> 
     <add key="repositoryPath" value="..\..\packages" /> 
    </config> 
    <packageSources> 
     <clear /> 
     <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> 
     <add key="CustomPackagesLocation" value="..\..\packages" /> 
    </packageSources> 
    <disabledPackageSources /> 
</configuration> 

在Visual Studio中的解決方案時,我點擊右鍵,點擊「管理的NuGet軟件包的解決方案...「,並安裝一個軟件包(例如Newtonsoft.Json),我希望它會在我的MobileApp/packages/文件夾中安裝這些軟件包文件,這是我在解決方案的nuget.config中設置的位置。但事實並非如此。相反,這些文件被放入全局NuGet包位置,即%USERPROFILE%\.nuget\packages

爲什麼?我的nuget.config文件不應該重寫那個嗎?我已經驗證過,當我進入程序包管理器設置時,CustomPackagesLocation的位置是正確的,但顯然,repositoryPath設置似乎不影響任何內容。

我還注意到,在project.json.lockProject.nuget.targets文件中,包文件夾被設置爲全局NuGet包位置(%USERPROFILE%/.nuget/packages之一)。爲什麼?它從哪裏拉這個值?

+0

您的項目是否使用PackageReferences? –

+0

我希望 - 不幸的是,並非我們所有的團隊都在VS2015上,所以我不想讓VS2017成爲一項需求。我正在使用project.json。 – jbyrd

+0

你有沒有試過這個:https://stackoverflow.com/questions/7676640/how-do-i-specify-the-directory-where-nuget-packages-are-installed 或者這個:https:// stackoverflow。 com/questions/4092759/is-it-it-possible-change-the-location-of-packages-for-nuget – BikerDude

回答

1

爲什麼?它從哪裏拉這個值?

Project.json文件的默認軟件包目錄是%USERPROFILE%/.nuget/packagesproject.json項目現在不支持repositoryPath配置。這就是爲什麼你改變了repositoryPath的原因,但NuGet仍然把軟件包放到全局NuGet軟件包的位置。你可以參考GitHub上的same issue

如果您想要更改軟件包的默認位置project.json,您可以設置「NUGET_PACKAGES」環境變量。只需設置「NUGET_PACKAGES」=「.... \ packages」。或者你可以一個NuGet.Config文件將包含以下內容的解決方案旁:

<?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
    <config> 
     <add key="globalPackagesFolder" value="..\..\packages" /> 
    </config> 
</configuration> 

對配置部分的詳細信息,請參閱NuGet.Config reference

+0

謝謝!是的,這是我在@MattWard的提示後發現的。它花了我永遠追捕這個簡單的事實(只有packages.config項目使用repositoryPath,其他人使用globalPackagesFolder)。也許如果我更仔細地閱讀nuget.config文檔,我會注意到這一點;但是這些事實是在括號內和奇怪的格式 - 在一個薄的表格列內,所以它使它下降到3行,更容易跳過)。 – jbyrd