Xamarin Forms PCL升级.NET Standard后NuGet依赖包不显示问题咨询
这个问题我之前升级.NET Standard的时候也碰到过,其实是NuGet依赖管理的逻辑变了,咱们一步步来理清楚:
在PCL时代,NuGet默认用packages.config管理依赖,所有直接、间接依赖都会被显式安装到各个平台项目(比如Android)里,所以NuGet资源管理器能看到所有包。但升级到.NET Standard 2.0后,项目默认切换到了PackageReference格式——这种模式下,你只需要在.NET Standard项目里安装直接依赖的包(比如Xam.Plugin.Geolocator),它的间接依赖会由NuGet自动解析、恢复,并且默认不会在NuGet资源管理器的「已安装」列表里展示(UI只显示你手动安装的包)。但这些依赖其实已经被正确引入项目了,所以你的应用能正常运行。
给你几种实用的方法:
用NuGet包管理器控制台查询:
打开Visual Studio的「工具」->「NuGet包管理器」->「包管理器控制台」,运行以下命令(替换成你的项目名称):Get-Package -ProjectName YourNetStandardProjectName -IncludeTransitive这个命令会列出项目所有直接和间接依赖,包括每个包的版本号。
查看项目文件或assets文件:
- 直接打开你的.NET Standard项目的
.csproj文件,里面的<PackageReference>节点记录了你手动安装的包; - 查看项目目录下
obj文件夹里的project.assets.json文件——这是NuGet恢复依赖时生成的,里面详细记录了完整的依赖树,包括每个间接依赖的版本号和来源。
- 直接打开你的.NET Standard项目的
使用dotnet CLI命令:
打开命令行,导航到你的.NET Standard项目所在目录,运行:dotnet list package --include-transitive这会输出清晰的依赖链,每个包的名称和版本都会明确显示。
在NuGet UI里显示间接依赖:
如果你还是想在NuGet资源管理器的UI里看到所有依赖,可以在Visual Studio里调整设置:打开NuGet包管理器,点击右上角的齿轮图标进入设置,找到「包管理」->「默认包管理格式」,确认是PackageReference后,回到「已安装」标签,勾选「显示传递包」(不同VS版本位置可能略有不同,一般在搜索框附近),这样就能看到所有间接依赖了。
内容的提问来源于stack exchange,提问作者aherrick

