NuGet包安装到错误的文件夹

时间:2017-08-10 15:40:11

标签: visual-studio xamarin.forms nuget visual-studio-2017 nuget-package

我正在Visual Studio 2017中使用Xamarin.Forms PCL移动应用程序,使用project.json进行包管理(我没有使用PackageReference,因为Visual Studio 2017是必需的,有些是我们的团队仍在使用Visual Studio 2015)。我在解决方案中有多个项目,我有多个项目分支,如下所示:

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中右键单击解决方案时,单击&#34;管理解决方案的NuGet包...&#34;,然后安装包(例如Newtonsoft.Json), 我希望它会将这些包文件安装在我的MobileApp/packages/文件夹中,这是我在解决方案中设置的位置nuget.config。但它并没有。而是将文件放入全局NuGet包位置,即%USERPROFILE%\.nuget\packages

为什么呢?难道我的nuget.config文件不应该覆盖它吗?我已经确认,当我转到Package Manager Settings时,CustomPackagesLocation的位置是正确的,但显然repositoryPath设置似乎不会影响任何内容。

我还注意到,在project.json.lockProject.nuget.targets文件中,package文件夹设置为全局NuGet包位置(%USERPROFILE%/.nuget/packages一个)。为什么?它从哪里拉出这个值

2 个答案:

答案 0 :(得分:3)

  

为什么呢?它从哪里拉出这个值

Project.json文件的默认包目录是%USERPROFILE%/.nuget/packages,而project.json项目现在不支持repositoryPath配置。这就是您更改repositoryPath的原因,但NuGet仍将包放入全局NuGet包位置。您可以参考GitHub上的same issue

如果您想更改project.json的套餐默认位置,您可以设置&#34; NUGET_PACKAGES&#34;环境变量。只需设置&#34; NUGET_PACKAGES&#34; =&#34; .... \ packages&#34;。或者,您可以在解决方案旁边放置一个NuGet.Config文件,其中包含以下内容:

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

有关配置部分的详细信息,请参阅NuGet.Config reference

答案 1 :(得分:0)

我有一个非常相似的问题,即它没有将packages文件夹用于类库。由于某种原因,我的csproj文件设置了一些程序集。我删除了这一行,并做了一个update-package -reinstall -project myclasslibrary,它再次正常工作。

我不确定是什么首先设置了HintPath。