【发布时间】:2019-08-05 19:28:28
【问题描述】:
我正在使用 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 中,当我右键单击解决方案时,单击“Manage NuGet Packages For Solution...”,然后安装一个包(例如 Newtonsoft.Json),我希望它会将这些包文件安装在我的MobileApp/packages/ 文件夹中,即我在解决方案的 nuget.config 中设置的位置。但事实并非如此。而是将文件放入全局 NuGet 包位置,即%USERPROFILE%\.nuget\packages。
为什么?我的 nuget.config 文件不应该覆盖它吗?我已经验证,当我转到包管理器设置时,CustomPackagesLocation 的位置是正确的,但显然 repositoryPath 设置似乎没有任何影响。
我还注意到在 project.json.lock 和 Project.nuget.targets 文件中,包文件夹设置为全局 NuGet 包位置(%USERPROFILE%/.nuget/packages 之一)。为什么?它是从哪里提取这个值的??
【问题讨论】:
-
你的项目使用 PackageReferences 吗?
-
我希望 - 不幸的是,并不是我们所有的团队都在使用 VS2015,所以我不想让 VS2017 成为必需品。我正在使用 project.json。
-
@jbyrd 你也可以在解决方案NuGet Config中设置全局包文件夹路径,那么你应该可以实现你想要的。
-
@jbyrd 抱歉忘记发布密钥。关键是 globalPackagesFolder
-
@imps - 是的,就是这样 - 这里的主要内容是:使用 packages.config 的项目使用 repositoryPath,而其他项目(使用 project.json 和使用 PackageReferences 的项目)使用globalPackagesFolder.
标签: visual-studio xamarin.forms nuget visual-studio-2017 nuget-package