首页 > 解决方案 > 找不到nuget文件夹

问题描述

我找不到一些 nuget 包(VS 2019,asp.net core 2.2)。我发现在我的 .nuget 文件夹和 VS 中找不到 System.ComponentModels.Annotations,它旁边没有像所有其他包一样的“扩展”箭头:

在此处输入图像描述

在我的 .nuget 文件夹中:

在此处输入图像描述

我已经尝试清除我的包文件夹并重新构建以获取所有包。我试过更新包重新安装。我试过直接安装 system.componentmodel.annotations (而不是将它作为依赖项安装)。我的解决方案构建良好,但我在硬盘驱动器上的任何地方都找不到这个包。我还注意到 Microsoft.AspNetCore.Razor.Design 表现出完全相同的行为。

标签: nuget

解决方案


当 NuGet 还原PackageReference用于包的项目(所有 SDK 样式项目,以及选择加入传统项目)时,它会写入obj\project.assets.json文件,这是 MSBuild 用于完成其余构建的文件。

查看packageFolders我的测试项目的部分,我看到了:

  "packageFolders": {
    "c:\\git\\test\\globalPackages\\": {},
    "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {}
  },

请注意,我有一个nuget.config将我的全局包文件夹从我的用户配置文件全局包文件夹中重定向,因此我创建的临时/假包不会污染我的真实开发环境。仅供参考,以防您想知道为什么看不到c:\users\zivkan\.nuget\packages.

但请注意,有两个包文件夹。

System.ComonentModel.Annotations在 的libraries部分中寻找project.assets.json,我看到:

    "System.ComponentModel.Annotations/4.5.0": {
      "sha512": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==",
      "type": "package",
      "path": "system.componentmodel.annotations/4.5.0",
      "files": [
          // list of every file in package
      ]
    },

看到路径说system.componentmodel.annotations/4.5.0,这意味着它可能在c:\git\test\globalPackages\system.componentmodel.annotations\4.5.0和/或中的一个或两个中C:\Program Files\dotnet\sdk\NuGetFallbackFolder\system.componentmodel.annotations\4.5.0

对于尝试在 Powershell 中加载它的用例,您可以尝试加载lib\*目录中的一个程序集。选择一个您认为与您的 Powershell 版本兼容的 TFM。

至于解决方案资源管理器没有twisty来扩展包的原因,去thetargets部分找到包project.assets.json,你会看到这个:

      "System.ComponentModel.Annotations/4.5.0": {
        "type": "package",
        "compile": {
          "ref/netcoreapp2.0/_._": {}
        },
        "runtime": {
          "lib/netcoreapp2.0/_._": {}
        }
      },

换句话说,包没有引入任何资产或额外的 NuGet 依赖项。因此在解决方案资源管理器中没有什么可扩展的。

在这种特定情况下,这是因为netcoreapp2.0运行时内置了程序集,并且Microsoft.NETCore.App包具有它的编译时元数据。这就是为什么我问你为什么要找这个包裹。如果您使用在编译期间project.assets.json查找构建使用的确切System.ComponentModel.Annotations.dll内容,您会发现无法加载的仅元数据引用程序集。但是我在上面给出了关于如何找到包目录的说明,您可以在其中一个lib\*目录中查找可加载的 dll 以尝试在 Powershell 中加载。


推荐阅读