添加到解决方案时,NuGet 将 restore/install 打包到多个位置

When added to solution NuGet packages restore/install to multiple locations

我正在使用 Visual Studio 2017,构建一个 .Net 框架(非核心)v4.6.1 ASP.Net MVC 项目 并且当我添加包时对于我的解决方案中的单个项目,这些包似乎 restoring/installing 到多个不同的位置。我正在安装来自多个提要的包,有些是我公司内部的,有些是 public.

有些包位于我的解决方案根目录下,而其他包似乎位于 %userprofile%。nuget\packages\

甚至安装了一个包,它的提示路径与它们两个位于完全不同的位置。该软件包已安装在那里,但我不知道为什么它没有安装到我认为是解决方案的本地软件包文件夹中。

我不确定这些问题是否是正确的问题,但这些是我现在要回答的问题:

  1. 对于 VS2017,.Net framework,ASP.NetMVC 包的默认安装位置是什么?
  2. 为了 CI/CD 目的,我如何指定包裹来自哪个提要?
  3. NuGet 是否会查找我的计算机上已安装的包?
  4. 如果是,NuGet 在哪里寻找包,我在哪里可以找到它寻找的位置列表。

谢谢!

1.For VS2017, .Net framework, ASP.Net MVC what is the default package install location?

这取决于您使用的包管理方法。如果您使用 package.config,默认包安装位置是解决方案根目录,如果您使用 PackageReference,默认包安装位置是 %userprofile%.nuget\packages\。这就是为什么您将包添加到解决方案中的单个项目的原因,这些包似乎 restoring/installing 到多个不同的位置。您可以卸载并编辑您的项目,检查项目文件.csproj,您会发现以下内容:

  <ItemGroup>
    <PackageReference Include="xxxxx">
      <Version>x.x.x</Version>
    </PackageReference>
  </ItemGroup>

要解决这个问题,您可以接受Lex的建议。 如果你想统一,选择并更改文件。你可以卸载那些使用PackageReference(或package.config)的包,然后更改nuget设置(Tools->Options->NuGet Package Manager->General->Default package management format->Packages.config),然后重新安装那些包,确保它们使用统一的形式.

2.How do I specify which feed a package comes from for CI/CD purposes?

这样的事情你不能做,也不需要做。正如我们所知,当我们从多个提要安装 nuget 包时,所有的包都会下载到本地主机,Visual Studio 将在本地使用这些包,Nuget 不关心它来自哪个提要。

3.Does NuGet look for packages already installed on my computer? 4.If yes, where does NuGet look for packages and where can I find its list of locations it looks for.

是的,您可以使用命令行 nuget locals all -list 查找其位置列表。

有关更多详细信息,请参阅 Managing the global packages, cache, and temp folders

希望这对您有所帮助。