使用NuGet包时,能否优先选用PCL而非.NET Standard程序集?
解决.NET Framework 4.6.2项目优先引用NuGet包中PCL程序集的方法
我完全懂你的困扰——明明还没准备好切换到.NET Standard,更新NuGet包时却自动拉了.NET Standard 2.0的依赖,确实让人头疼。下面是几个实用方案,帮你强制NuGet优先选择PCL版本的程序集:
方案1:通过项目文件添加依赖约束
直接编辑项目文件,给NuGet明确指定优先解析的框架类型:
- 右键项目 → 选择「编辑.csproj」
- 在
<PropertyGroup>节点内添加以下配置(把YourPackageId替换成你目标NuGet包的实际ID):
这个配置会让NuGet优先匹配指定的PCL框架(这里用的是常见的PCL profile,你可以根据实际需要调整),而非默认选择.NET Standard 2.0。<PackageTargetFallback>portable-net45+win8+wp8+wpa81;$(PackageTargetFallback)</PackageTargetFallback>
方案2:明确指定PCL版本依赖
如果方案1不生效,可以尝试直接锁定PCL版本的依赖:
- 打开项目的
packages.config,找到目标包的条目,手动添加对应PCL版本的依赖子包(如果该包的PCL版本是独立子包的话)。 - 或者在项目文件的
<PackageReference>中明确限定目标框架:<PackageReference Include="YourPackageId" Version="[x.y.z]"> <TargetFrameworks>portable-net45+win8+wp8+wpa81</TargetFrameworks> </PackageReference>
方案3:降级到未引入.NET Standard的包版本
如果该NuGet包是在新版本才开始支持.NET Standard 2.0,你可以暂时回退到仍以PCL为核心目标的旧版本:
- 在NuGet包管理器中找到目标包,点击版本下拉框,选择一个发布时间较早、未切换到.NET Standard的版本安装。
- 记得勾选「防止自动更新」,避免后续误操作升级回去。
额外提醒
- 确保你的VS 2017安装了最新的.NET相关工具(虽然你不想用.NET Standard,但工具完整性会影响依赖解析逻辑)。
- 如果你的类库本身就是PCL项目,它会自动优先匹配PCL依赖,重点调整桌面应用项目的配置即可。
内容的提问来源于stack exchange,提问作者David Beavon
相关产品推荐
相关产品推荐

