我正在 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 文件夹的根级别添加了包文件夹。我每个解决方案都有一个 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
。
我还注意到,在 project.json.lock
和 Project.nuget.targets
文件中,包文件夹设置为全局 NuGet 包位置(%USERPROFILE%/.nuget/packages
一)。为什么?它从哪里提取这个值?
最佳答案
Why? Where is it pulling this value from??
Project.json 文件的默认包目录是 %USERPROFILE%/.nuget/packages
并且 project.json
项目现在不支持repositoryPath 配置。这就是为什么您更改了repositoryPath,但NuGet仍然将包放入全局NuGet包位置的原因。您可以引用same issue在 GitHub 上。
如果要更改 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有关配置部分的详细信息。
关于visual-studio - NuGet 包安装到错误的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45618098/