You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Visual Studio 2015 Update3无法读取私有Klondike NuGet服务器特定包

问题分析与解决方案

咱们先把问题核心理清楚:VS2015搭配NuGet 3.5访问Klondike私有服务器时,自动发送的查询参数里targetFramework='net'会搜不到目标为net461的包;但手动改成net461就能找到,而且VS偶尔还会自动切换这个参数。下面分两部分说,看是要调VS还是改包:

一、NuGet包是否需要修改?

先看你的项目配置,已经正确设置了<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>,这部分是没问题的。不过你可以先验证生成的包是否正常:

  • 把你的nupkg包解压,检查lib目录下有没有net461文件夹,里面是否包含对应的程序集dll;
  • 查看自动生成的.nuspec文件(解压后可见),确认<dependencies>里针对net461的依赖声明是否正确(SDK项目通常会自动生成正确内容)。

如果这两项都没问题,那你的包本身是正常的,不需要修改。问题出在VS2015的NuGet客户端和Klondike服务器的框架筛选逻辑匹配上。

二、VS2015的配置调整方案

VS2015自带的NuGet 3.5确实存在框架筛选的兼容性问题,尤其是对通用框架标识符(如net)和具体版本(如net461)的处理上。你可以试试以下几种方法:

1. 强制NuGet使用具体框架版本搜索

在项目根目录创建或修改NuGet.config文件,添加以下配置,强制NuGet搜索时默认使用net461作为目标框架:

<configuration>
  <config>
    <add key="targetFramework" value="net461" />
  </config>
</configuration>

这样能避免VS自动发送targetFramework='net'的查询参数。

2. 确保项目本身目标框架为net461

打开VS2015项目属性,确认项目的目标框架是.NET Framework 4.6.1。如果项目目标的是更低版本(比如net45),NuGet会自动使用更通用的net作为搜索框架,导致匹配不到net461的包。

3. 手动安装包绕过自动搜索

如果自动搜索还是有问题,可以用Package Manager Console手动指定框架安装:

Install-Package Package-ID -Version 1.0.0 -Source 你的Klondike私有源名称 -Framework net461

这种方式直接指定了框架,能避开自动筛选的bug。

补充:关于Klondike服务器的小提示

Klondike对NuGet v3 API的支持不如官方NuGet.org完善,尤其是框架筛选的逻辑。如果以上VS配置调整都无效,也可以考虑检查Klondike的版本是否有更新,但这部分属于服务器端调整,优先级低于VS的配置修改。


内容的提问来源于stack exchange,提问作者kat1330

火山引擎 最新活动